varios varias usar test solo siguientes regulares regresará que patrones palabras palabra líneas los expresiones exacta cuál crucigrama con comiencen comandos comando buscar unix search grep special-characters

varias - grep para personajes especiales en Unix



usar grep (6)

Una nota relacionada

Para grep para retorno de carro, es decir, el carácter /r , o 0x0d , podemos hacer esto:

grep -F $''/r'' application.log

Alternativamente, use printf , o echo , para la compatibilidad con POSIX

grep -F "$(printf ''/r'')" application.log

Y podemos usar hexdump , o less para ver el resultado:

$ printf "a/rb" | grep -F $''/r'' | hexdump -c 0000000 a /r b /n

En cuanto al uso de $''/r'' y otros caracteres admitidos, consulte Bash Manual> ANSI-C Quoting :

Las palabras de la forma $ ''cadena'' se tratan especialmente. La palabra se expande a cadena, con caracteres escapados de barra invertida reemplazados según lo especificado por el estándar ANSI C

Tengo un archivo de registro (application.log) que puede contener la siguiente cadena de caracteres normales y especiales en varias líneas:

*^%Q&$*&^@$&*!^@$*&^&^*&^&

Quiero buscar el número (s) de línea que contiene esta cadena de caracteres especiales.

grep ''*^%Q&$*&^@$&*!^@$*&^&^*&^&'' application.log

El comando anterior no devuelve ningún resultado.

¿Cuál sería la sintaxis correcta para obtener los números de línea?


Dile a grep que trate tu entrada como cadena fija usando la opción -F .

grep -F ''*^%Q&$*&^@$&*!^@$*&^&^*&^&'' application.log

Se requiere la opción -n para obtener el número de línea,

grep -Fn ''*^%Q&$*&^@$&*!^@$*&^&^*&^&'' application.log



Podría intentar eliminar cualquier espacio y caracteres alfanuméricos. Y luego use -n le dará el número de línea. Pruebe lo siguiente:

grep -vn "^[a-zA-Z0-9 ]*$" application.log


Pruebe vi con la opción -b, esto mostrará caracteres especiales de final de línea (normalmente lo uso para ver las terminaciones de línea de Windows en un archivo txt en un sistema operativo Unix)

Pero si quieres una solución con guiones obviamente vi no funcionará, así que puedes probar las opciones -f o -e con grep y canalizar el resultado en sed o awk. De la página de grep man:

Matcher Selection -E, --extended-regexp Interpreta PATTERN como una expresión regular extendida (ERE, ver a continuación). (-E es especificado por POSIX)

-F, --fixed-strings Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.)


grep -n "/*/^/%/Q/&/$/&/^/@/$/&/!/^/@/$/&/^/&/^/&/^/&" test.log 1:*^%Q&$&^@$&!^@$&^&^&^& 8:*^%Q&$&^@$&!^@$&^&^&^& 14:*^%Q&$&^@$&!^@$&^&^&^&