Terminal: uso del comando grep con el carácter '[' como destino, no como función

0

Estoy usando el comando grep En una secuencia de comandos simple, el problema, sin embargo, es que la cadena que está buscando el comando grep incluye un carácter de corchete: [ .

Después de algunas investigaciones, encontré que el carácter de corchete [ se usa de hecho como una función para optimizar la salida de los comandos grep a través de un proceso llamado " pipelining " (aunque no me cites en It como No estoy seguro).

Mi pregunta:

¿Cómo busco una cadena con un carácter '[' sin invocar una función de canalización dentro de grep?

Elaboración:

El script está buscando en el registro del sistema la cadena su[ . Este es mi comando actual que funciona mal: tail -1 system.log | grep " su[" , sin embargo, no funcionará debido al corchete al final, devolviendo el error: grep: brackets ([ ]) not balanced .

Gracias de antemano.

    
pregunta user4493605 13.08.2015 - 16:19

1 respuesta

2

Los corchetes deben escaparse con \ , porque es un carácter especial. Tu comando se verá como:

tail -1 system.log | grep " su\["

Caracteres especiales

Desde este sitio puede obtener información sobre los caracteres especiales en bash.

  

¿Qué hace que un personaje sea especial? Si tiene un significado más allá de su significado literal, un meta-significado, entonces nos referimos a él como un carácter especial. Junto con los comandos y las palabras clave, los caracteres especiales son componentes básicos de los scripts de Bash.

\ es un carácter especial y podría usarse como:

  

[]   prueba.

     

Expresión de prueba entre []. Tenga en cuenta que [es parte de la prueba incorporada de shell (y un sinónimo de ella), no es un enlace al comando externo / usr / bin / test.

     

[[]]   prueba.

     

Expresión de prueba entre [[]]. Más flexible que la prueba de un solo corchete [], esta es una palabra clave de shell.

     

[]   elemento de matriz.

     

En el contexto de una matriz, los corchetes establecen la numeración de cada elemento de esa matriz.    Array[1]=slot_1

     

echo ${Array[1]}

     

[]   rango de caracteres.

     

Como parte de una expresión regular, los corchetes delinean un rango de caracteres para que coincidan.

     

$ [...]   expansión de enteros.

     

Evalúa la expresión entera entre $ [].

    
respondido por el Mateusz Szlosek 13.08.2015 - 16:29

Lea otras preguntas en las etiquetas