Procesamiento de texto en Linux: explicación detallada de grep de tres espadachines

1. Introducción a la herramienta grep

    Siempre que se utilice el comando grep del sistema Linux para encontrar cadenas calificadas en un archivo, mediante la cooperación de varias opciones, puede buscar y hacer coincidir patrones para satisfacer nuestras necesidades.
    La familia grep de Unix incluye grep, egrep y fgrep. Los comandos de egrep y fgrep son solo ligeramente diferentes de grep. egrep es una extensión de grep y admite más metacaracteres re. fgrep es grep fijo o grep rápido. Tratan todas las letras como palabras, es decir, los metacaracteres en expresiones regulares representan su propio significado literal, ya no son especiales. Linux usa la versión GNU de grep. Es más poderoso, puede usar las funciones de egrep y fgrep a través de las opciones de línea de comando -G, -E, -F.
    Ingrese grep --help en la línea de comandos del sistema Linux para ver la documentación de ayuda de grep. El comando grep tiene muchas opciones. No es necesario que las recuerde todas en el uso normal. Dominar las opciones comunes es suficiente.

Dos opciones de uso común del comando grep

Opciones uso
-un Buscar datos en archivo binario como archivo de texto
-C Cuente el número de veces que se encuentra la 'cadena de búsqueda'
-re Cuando especifique que desea buscar un directorio en lugar de un archivo, use el parámetro -d. Hay tres parámetros válidos después del parámetro -d: read (read), recurse (recursive), skip (skip) y use the -d parámetro Cuando necesita agregar uno de los primeros tres parámetros de acuerdo con la situación real
-F Especifique el archivo de muestra. Si desea buscar "root" y "ops" en un archivo, puede agregar "root" y "ops" a un archivo, una muestra por línea, este archivo es el archivo de muestra, el comando formato: grep -f archivo de muestra archivo de destino
-yo Ignore la diferencia en el caso, todos los casos se tratan como la misma letra
-norte Genere el número de línea de la línea donde se encuentra la cadena coincidente
-O Solo se emite la parte que coincide con el patrón coincidente. Si el patrón coincidente no coincide con una línea completa, no se generará una línea completa
-q Salida silenciosa, no se muestra información
-r El efecto de este parámetro es el mismo que especificar el parámetro "-d recurse"
-v Invertida (búsqueda inversa), es decir, se muestra la línea sin el contenido de la 'cadena de búsqueda'
-w Coincidencia exacta, el texto coincidente solo puede ser una palabra, no una parte determinada de la palabra. Por ejemplo, en el texto de búsqueda, el interés y el interés están en líneas diferentes y solo quiero encontrar la línea que contiene interés. Esto es fino Utilice la opción -w para especificar que la línea de búsqueda es la línea que contiene el interés, de modo que pueda evitar coincidir con la línea de interés
\segundo Carácter de límite, carácter de bloqueo de palabra, como: \ bxxxx \ b solo coincide con xxxx, similar a la opción -w
-UN Muestra la línea donde se encuentra la cadena de búsqueda y las siguientes n líneas (grep -A n "cadena" nombre de archivo), después
-SEGUNDO Muestra la línea donde se encuentra la cadena de búsqueda y las N líneas anteriores (grep -B n "cadena" nombre de archivo), antes
-C Muestra la línea donde se encuentra la cadena de búsqueda y las n líneas antes y después ((grep -C n "cadena" nombre de archivo)), contexto
-MI PATTERN (patrón) es una expresión regular extendida (ERE), soporte abierto para expresiones regulares extendidas, grep -E es equivalente al comando egrep
-F PATTERN (patrón) es un conjunto de cadenas fijas separadas por saltos de línea. Utilice este parámetro para tratar el contenido de un archivo de muestra como una lista de cadenas fijas
-GRAMO PATTERN (patrón) es una expresión regular básica (BRE)
--color=auto Puede agregar color a las palabras clave encontradas

Tres, ejemplos

1. Elimine la línea que contiene la raíz en el archivo / etc / passwd

#grep "root" /etc/passwd
或
#cat /etc/passwd | grep "root" 

2. Utilice la opción -c para contar el número de líneas que contienen root en el archivo / etc / passwd

#grep "root" /etc/passwd | wc -l
或
#cat /etc/passwd | grep "root" wc -l

3. Utilice las opciones -d y -r para averiguar el contenido del archivo
tmp.txt que contiene ops en el directorio / tmp :
cat tmp.txt
ops
ops_11111

#查找
#grep -d recurse "ops" /tmp 或 grep -r "ops" /tmp
#输出内容如下:
/tmp/tmp.txt:ops
/tmp/tmp.txt:ops_11111
#提取文件名
#grep -d recurse "ops" /tmp | awk -F: '{print $1}' 或 grep -r "ops" /tmp | awk -F: '{print $1}'
#输出内容如下:
/tmp/1.txt
/tmp/1.txt

4. Usando la opción -f, el archivo de salida / etc / passwd siempre contiene el contenido de ops y la línea
username.txt que contiene root :
cat username.txt ----> user.txt como el archivo de muestra
ops
root

#查询
#grep -f username.txt /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ops:x:1002:1002::/home/ops:/bin/bash

5. El uso de la opción -i no distingue entre mayúsculas y minúsculas, averigüe
el contenido del archivo test.txt que contiene A o a en el archivo test.txt:
cat test.txt
A111
a111
B111

①不加-i选项
#grep 'a' test.txt
a111
②加-i选项
#grep -i 'a' test.txt
A111
a111

6. El uso de la opción -n, genera la línea que contiene las operaciones en el archivo / etc / passwd y genera el número de línea de la línea

#grep -n "ops" /etc/passwd
27:ops:x:1002:1002::/home/ops:/bin/bash

7. Utilice la opción -o para generar
el contenido del archivo de la palabra hola en el archivo test1.txt:
cat test1.txt
hola mundo
mi nombre es beijing

#grep -o "hello" test1.txt
hello ----->只输出模式匹配到的单词,而不是含有该单词的一整行

8. Uso de la opción -v, líneas de salida que no contienen / root / en el archivo / etc / passwd

#grep -v "root" /etc/passwd

9. Utilice la opción -w para generar el contenido del archivo test2.txt que contiene interés en el
archivo test2.txt:
cat test2.txt
interes ghaha
interester ghaha

①不加-w选项
#grep "interest" test2.txt
interest ghaha
interester ghaha
②加上-w选项
#grep -w "interest" test2.txt 
interest ghaha

10. El uso del carácter de límite \ b, genera la línea que contiene el interés en el archivo test2.txt

#grep "\binterest\b" test2.txt
interest ghaha

11. El uso de la opción -A, genera la línea que contiene ops y la siguiente línea en el archivo / etc / passwd

#grep -A 1 "ops"  /etc/passwd
ops:x:1002:1002::/home/ops:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

12. El uso de la opción -B, genera la línea que contiene ops y la línea anterior en el archivo / etc / passwd

#grep -B 1 "ops"  /etc/passwd
hahaha:x:1001:1001::/home/hahaha:/bin/bash
ops:x:1002:1002::/home/ops:/bin/bash

13. El uso de la opción -C, genera la línea que contiene las operaciones en el archivo / etc / passwd y una línea antes y después.

#grep -C 1 "ops" /etc/passwd
hahaha:x:1001:1001::/home/hahaha:/bin/bash
ops:x:1002:1002::/home/ops:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

Utilice el comando grep en combinación con los
habituales
. Si no comprende a los habituales, puede echar un vistazo a esto: https://blog.csdn.net/weixin_44901564/article/details/99075443 1. Extraiga los archivos que comienzan y terminar con la misma letra en la fila del archivo / etc / passwd

#grep `"^\([[:alpha:]]\).*\1$"` /etc/passwd 
#使用了正则分组及引用的知识,没有使用扩展正则,所以可以加不加-E选项都可以

2. Extraiga todos los ips del archivo de configuración de red / etc / sysconfig / network-scripts / ifcfg-ens33

#grep -Eo "([[:digit:]]+\.){3}[[:digit:]]+" /etc/sysconfig/network-scripts/ifcfg-ens33 
#使用了基本正则,扩展正则,分组与添加grep适当的选项

3. Extraiga el nombre del directorio principal del directorio / etc / sysconfig / network-scripts /

#echo "/etc/sysconfig/network-scripts/" |egrep -o "/.*[^/]" |egrep -o "/.*/"
/etc/sysconfig/
分为两步提取,第一步是先删除最后一个"/",目的是方便第二次的匹配模式的确定,第二步直接提取

Supongo que te gusta

Origin blog.csdn.net/weixin_44901564/article/details/104556127
Recomendado
Clasificación