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 (los) 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?
                    
                        unix
                                search
                                grep
                                special-characters
                                
                    
                    
                        Avinash Sonee
fuente
                
                fuente

^@: significa^seguido de@o carácter nulo?Respuestas:
Dile
grepque trate tu entrada como una cadena fija usando la-Fopción.grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log-nSe requiere la opción para obtener el número de línea,grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.logfuente
^,$,.,*y\. o puedes intentarlofgreptambién.fgrepes lo mismo quegrep -F.egrep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log?grep -rinF '-static'impresionesInvalid option «t». La respuesta de @ Mani funcionó , es decirgrep -rin "\-static".El que funcionó para mí es:
grep -e '->'La -e significa que el siguiente argumento es el patrón y no se interpretará como un argumento.
De: http://www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/
fuente
-, consulte también stackoverflow.com/questions/2427913/…Una nota relacionada
Para grep para el retorno de carro, es decir, el
\rcarácter, o0x0d, podemos hacer esto:Alternativamente, use
printf, oecho, para compatibilidad POSIXY podemos usar
hexdump, olesspara ver el resultado:Con respecto al uso de
$'\r'y otros caracteres compatibles, consulte el Manual de Bash> Citas ANSI-C :fuente
grep -n "\*\^\%\Q\&\$\&\^\@\$\&\!\^\@\$\&\^\&\^\&\^\&" test.log 1:*^%Q&$&^@$&!^@$&^&^&^& 8:*^%Q&$&^@$&!^@$&^&^&^& 14:*^%Q&$&^@$&!^@$&^&^&^&fuente
Puede intentar eliminar los caracteres alfanuméricos y los espacios. Y luego use
-nle dará el número de línea. Intente seguir:grep -vn "^[a-zA-Z0-9 ]*$" application.logfuente
Pruebe vi con la opción -b, esto mostrará caracteres especiales de final de línea (normalmente lo uso para ver los finales de línea de Windows en un archivo txt en un sistema operativo Unix)
Pero si desea una solución con script, obviamente vi no funcionará, así que puede probar las opciones -f o -e con grep y canalizar el resultado a sed o awk. Desde la página de manual de grep:
Matcher Selection -E, --extended-regexp Interpreta PATTERN como una expresión regular extendida (ERE, ver más abajo). (-E lo especifica POSIX).
fuente