Solución completa para los comandos de coincidencia de texto grep y fgrep de Linux
El uso de los comandos grep y fgrep en Linux El uso de ambos comandos está relacionado con la búsqueda y coincidencia de texto. Es el conocimiento básico en el aprendizaje introductorio de Linux. Recopilé para ti los comandos grep y fgrep que utilizan la solución completa, espero que pueda ayudar a todos.
Los comandos de coincidencia de texto de Linux grep y fgrep utilizan la solución completa
grep
grep (búsqueda global de expresión regular (RE) e imprime la línea, búsqueda integral regular expresión Expresión e imprime las líneas) es una potente herramienta de búsqueda de texto que utiliza expresiones regulares para buscar texto e imprime líneas coincidentes. La familia grep de Unix incluye grep, egrep y fgrep. Los comandos egrep y fgrep son sólo ligeramente diferentes de grep. egrep es una extensión de grep, que admite más metacaracteres. fgrep es grep fijo o grep rápido, que trata todas las letras como palabras, es decir, los metacaracteres en expresiones regulares representan sus propios significados literales. Linux usa la versión GNU de grep. Es más potente y puede utilizar las funciones de egrep y fgrep a través de las opciones de línea de comando -G, -E y -F.
La forma en que funciona grep es que busca una plantilla de cadena en uno o más archivos. Si la plantilla contiene espacios, se deben citar y todas las cadenas que siguen a la plantilla se tratan como nombres de archivo. Los resultados de la búsqueda se envían a la pantalla sin afectar el contenido del archivo original.
grep se puede utilizar en scripts de shell porque grep devuelve un valor de estado para indicar el estado de la búsqueda. Si la búsqueda de la plantilla tiene éxito, devuelve 0; si la búsqueda no tiene éxito, devuelve 1. el archivo buscado no existe, luego devuelve 2. Podemos utilizar estos valores de retorno para realizar algún trabajo de procesamiento de texto automatizado.
grep --help
Selección de patrón coincidente:
-E, --extended-regexp expresión regular extendida egrep
- F , --fixed-strings Una colección de cadenas delimitadas por nueva línea fgrep
-G, --basic-regexp Reglas regulares básicas
-P, --perl-regexp llama a Perl regular patrón
-e, --regexp=PATTERN seguido del patrón regular raíz, por defecto ninguno
-f, --file=FILE Obtener el patrón coincidente del archivo
-i, --ignore-case no distingue entre mayúsculas y minúsculas
-w, --word-regexp coincide con la palabra completa
-x, --line-regexp coincide con la Línea de palabra completa
-z, --null-data Una línea de datos de 0 bytes, pero no una línea en blanco
Varios:
-s, - -no -messages No mostrar mensajes de error
-v, --invert-match Mostrar líneas no coincidentes
-V, --version Mostrar número de versión
- -help Muestra información de ayuda
--mmap usa entrada asignada en memoria si es posible
Control de entrada:
-m, --max-count=NUM match El número máximo de
-b, --byte-offset imprime el número de bloque donde se encuentra la línea antes de imprimir la línea coincidente.
-n, --line-number muestra el número de línea de la coincidencia
--line-buffered actualiza cada línea de salida
-H, - -with-filename Al buscar varios archivos, muestre el prefijo del nombre del archivo coincidente
-h, --no-filename Al buscar varios archivos, no muestre el prefijo del nombre del archivo coincidente
--label=LABEL imprime ETIQUETA como nombre de archivo para entrada estándar
-o, --only-matching Muestra solo la parte de una línea que coincide con PATTERN
-q, - -quiet, --silent no muestra nada
--binary-files=TYPE asume el tipo TYPE del archivo binario;
TYPE puede ser `binario', `texto' , o `sin -match'
-a, --text coincide con cosas binarias
-I no coincide con cosas binarias
-d, --directories =ACCIÓN directorios Operación, lectura, recursividad, omisión
-D, --devices=ACCIÓN Establecer operaciones en dispositivos, FIFO y tuberías, lectura, omisión
-R, - r , --recursive llamada recursiva
--include=PATTERN Buscar solo archivos que coincidan con FILE_PATTERN
--exclude=PATTERN omitir archivos y directorios que coincidan con FILE_PATTERN
-- excluir-de=ARCHIVO Omitir todos los archivos excepto ARCHIVO
-L, --files- without-match Al hacer coincidir varios archivos, muestra nombres de archivos no coincidentes
-l, --files- with-matches Al hacer coincidir varios archivos, muestra el nombre del archivo coincidente
-c, --count Muestra cuántas veces ha coincidido
- Z, --null imprime el valor nulo carácter al final del archivo ARCHIVO
Control de archivo:
-B, --before-context=NUM imprime la coincidencia en sí y las líneas anteriores mediante el control NUM
-A, --after-context=NUM Imprime la coincidencia en sí y las siguientes líneas controladas por NUM
-C, --context=NUM Imprime la coincidencia en sí y las siguientes líneas, la primera pocas líneas están controladas por NUM
-NUM raíz -C tiene el mismo uso
--color[=WHEN],
--color [=WHEN ] Utilice la bandera para resaltar cadenas coincidentes;
-U, --binary Utilice la bandera para resaltar cadenas coincidentes;
-u, --unix-byte-offsets Cuando el CR El carácter no existe, informe el desplazamiento de bytes (modo MSDOS)
Ejemplo:
Archivo de prueba
Copiar código
Código como sigue :
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false , aaa, bbbb, cccc, aaaaaa
DADddd:x:2:2:daemon:/sbin:/bin/f
también
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp :/bin/false
amp;nadie:$:99:99:nadie:/:/bin/false
zhangy:x:1000:100:,,,:/ home/zhangy:/bin/bash
http:x:33:33:/srv/http:/bin/false
dbus:x:81:81:bus de mensajes del sistema :/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89:/var /lib /mysql:/bin/false
aaa:x:1001:1001:/home/aaa:/bin/bash
ba:x:1002:1002: /home/zhangy :/bin/bash
prueba:x:1003:1003:/home/prueba:/bin/bash
@zhangying:*:1004:1004: :/casa/prueba :/bin/bash
Policykit: x: 102: 1005: Po
a, líneas coincidentes que contienen raíz
Copiar código
El código es el siguiente:
[root@krlcgcms01 prueba]# grep root test
root:x:0:0:root:/root:/bin/bash
b, haga coincidir las líneas que comienzan con root o zhang, preste atención a la barra invertida
Copia el código
El código es el siguiente:
[ root@krlcgcms01 prueba]# cat test |grep '^\(root\|zhang\)'
root:x:0:0:root:/root:/bin/bash
zhangy: Igual que el ejemplo anterior, -e se omite de forma predeterminada
[root@krlcgcms01 test]# cat test |grep -e '^\(root\|zhang\)'
root:x:0:0:root:/root:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
d, la coincidencia comienza con zhang y contiene solo letras
Copiar código
El código es el siguiente:
[root@krlcgcms01 prueba ]# echo 'zhangying' | grep '^zhang[a-z]*$'
zhangying
e, coincide con las líneas que comienzan con bin. Utilice egrep, que se puede reemplazar con -. F, -G p>
Copia el código
El código es el siguiente:
[root@krlcgcms01 prueba]#
prueba de gato |grep -E '^bin'
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
f , agregue el número de línea de la línea en el archivo o salida delante de la línea coincidente
Copia el código
El código es el siguiente:
[ root@ krlcgcms01 prueba]# prueba de gato|grep -n zhangy
7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
13: ba:
g, no coincide con las líneas que comienzan con bin y muestra el número de línea
Copiar código
El código es el siguiente:
[root@krlcgcms01 prueba]# cat test|grep -nv '^bin'
root:x:0:0:root:/root:/bin/bash
DADDDD :x:2:2:daemon :/sbin:/bin/false
correo:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11 :ftp:/home/ftp:/bin/false
&nadie:$:99:99:nadie:/:/bin/false
zhangy:x:1000: 100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false p>
dbus:x :81:81:Bus de mensajes del sistema:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x: 89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba: x:1002:1002::/home/zhangy:/bin/bash
prueba:x:1003:1003:/home/test:/bin/bash p>
@zhangying :*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
h, mostrar el número de coincidencias, no mostrar contenido
Copiar código
El código es el siguiente:
[root@krlcgcms01 test]# cat test|grep - c zhang
3
i, coincide con el sistema, no coincide nada sin agregar -i.
Copia el código
El código es el siguiente:
[root@krlcgcms01 test]# grep system test
[root@ krlcgcms01 test]# grep -ni system test
9:dbus:x:81:81:System message bus:/:/bin/false
j, coincide con zhan pero no coincide con cualquier cosa, coincide con zhangy Se puede coincidir porque en el archivo de prueba está la palabra zhangy
Copia el código
El código es el siguiente:
[root@krlcgcms01 prueba]# prueba de gato| grep -w zhan
[root@krlcgcms01 prueba]# prueba de gato|grep -w zhangy
zhangy:x:1000:100: ,,,:/home/zhangy:/ bin/bash
ba: x: 1002: 1002: / home/zhangy: / bin/bash Se generará solo cuando sean iguales
[root@krlcgcms01 prueba]# echo "aaaaaa" |grep -x aaa
[root@krlcgcms01 prueba]# echo "aaaa" |grep - x aaaa
aaaa
l, solo coincide una vez como máximo. Si se elimina -m 1, habrá tres
Copiar código
El código es el siguiente:
[root@krlcgcms01 prueba]# cat test |grep -m 1 zhang
zhangy:x:1000:100:,,,:/home/zhangy: /bin/bash
m, el número de bloque se muestra delante de la línea coincidente. ¿Para qué se utiliza este número de bloque? ¿Alguien puede decírmelo?
Copiar código
El código es el siguiente:
[apacheuser@krlcgcms01 prueba]$ cat test |grep -b zha
241: zhangy: x: 1000: 100:, ,,:/ home/zhangy:/bin/bash
480:ba:x:1002:1002::/home/zhangy:/bin/bash
558:@zhangying :*:1004 :1004::/home/test:/bin/bash
n, al hacer coincidir varios archivos, agregue el nombre del archivo delante de la línea coincidente
Copiar código
El código es el siguiente:
[apacheuser@krlcgcms01 prueba]$ grep -H 'root' test test2 testbak
test:root:x:0 :0:root:/root: /bin/bash
test2:root
testbak:root:x:0:0:root:/root:/bin/bash p>
o, muchos Al hacer coincidir archivos, no agregue el nombre del archivo delante de la línea coincidente
Copia el código
El código es el siguiente:
[apacheuser@
krlcgcms01 prueba]$ grep -h 'root' prueba test2 testbak
root:x:0:0:root:/root:/bin/bash
root
root: p>
El código es el siguiente:
[apacheuser@krlcgcms01 test]$ grep -l 'root' test test2 testbak DAta
test
test2 p>
testbak
q, cuando no hay -o, hay una línea coincidente. Después de agregar -o, hay 3 raíces en esta línea. salen raíces
Copia el código
El código es el siguiente:
[apacheuser@krlcgcms01 prueba]$ grep 'root' test
root:x:0:0:root: /root:/bin/bash
[apacheuser@krlcgcms01 prueba]$ grep -o prueba 'root'
root p>
root
root
r, muestra recursivamente el contenido coincidente, crea un directorio mytest en el directorio de prueba, copia el archivo de prueba en el directorio de prueba a mytest y Puede ver los resultados anteriores
Copia el código
El código es el siguiente:
[root@krlcgcms01 test]# grep test -R /tmp/test /mytest
/tmp/test/mytest/ test:test:x:1003:1003::/home/test:/bin/bash
/tmp/test/mytest/ test:@zhangying:*:1004:1004::/home/test :/bin/bash
s, muestra las 3 líneas después de hacer coincidir la raíz
Copia el código
El código es el siguiente:
[root@ krlcgcms01 prueba]# cat test |grep -A 3 root
root:x:0:0:root:/ root:/bin/bash
bin:x:1:1 :bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
daemon:x:2 :2:daemon:/sbin:/bin/false
correo :x:8:12:mail:/var/spool/mail:/bin/false
fgrep p>
Uso: fgrep [opciones]... PATRÓN [ARCHIVO].. .
Busca PATRÓN en cada ARCHIVO o entrada estándar.
PATRÓN es un conjunto de cadenas de longitud fija separadas por saltos de línea.
Por ejemplo: fgrep -i 'hola mundo' menu.h main.c
Selección e interpretación de expresiones regulares:
-e, --regexp= PATTERN Utilice PATTERN para operaciones coincidentes
-f, --file=FILE Obtener PATTERN de ARCHIVO
-i, --ignore-case Ignorar mayúsculas y minúsculas
- w, --word-regexp obliga a PATTERN a coincidir exactamente solo con palabras
-x, --line-regexp obliga a PATTERN a coincidir exactamente con una sola línea
-z, -- null -data Una línea de datos de 0 bytes, pero no una línea en blanco
Varios:
-s, --no-messages No mostrar mensajes de error
-v, --invert-match selecciona líneas no coincidentes
-V, --version muestra información de la versión y sale
--help muestra esta ayuda y sale
--mmap Ignorar compatibilidad con versiones anteriores
Control de salida:
-m, --max-count=NUM El número máximo de coincidencias
- b, - -byte-offset imprime el número de bloque donde se encuentra la línea antes de imprimir la línea coincidente
-n, --line-number muestra más el número de línea de la línea coincidente
- -line-buffered actualiza cada línea de salida
-H, --with-filename Al buscar varios archivos, muestra los prefijos de nombres de archivos coincidentes
-h, --no-filename Al buscar varios archivos, no muestre el prefijo de nombre de archivo coincidente
--label=LABEL use LABEL como prefijo de nombre de archivo de entrada estándar
-o, --only-matching only Mostrar la parte de una línea que coincide con PATTERN
-q, --quiet, --silent No mostrar todos los resultados
--binary-files=TYPE Asume el tipo TYPE del archivo binario;
TIPO puede ser `binario', `texto' o `sin coincidencia'
-a, --text es equivalente a --binary-files=text
-I es equivalente a --binary-files= without-match
-d, --directories=ACTION forma de operar directorios;
ACTION puede ser `read', `recurse' u `skip'
-D, --devices=ACTION La forma de operar dispositivos, colas de primero en entrar, primero en salir y sockets;
ACCIÓN puede ser `leer' u `saltar'
-R, -r, --recursive es equivalente a --directories=recurse
--include=FILE_PATTERN solamente busca archivos que coincidan con FILE_PATTERN
--exclude=FILE_PATTERN Omitir archivos y directorios que coincidan con FILE_PATTERN
--exclud
e-from=FILE omite todos los archivos excepto ARCHIVO
--exclude-dir=PATTERN omite todos los directorios que coincidan con PATTERN.
-L, --files-with-matches solo imprime nombres de archivos que no coinciden con ARCHIVOS
-l, --files-with-matches solo imprime nombres de archivos que coinciden con ARCHIVOS
-c, --count solo imprime el número de líneas coincidentes en cada ARCHIVO
-T, --initial-tab separa las pestañas al principio de la línea (si es necesario)
-Z, --null imprime un carácter nulo al final del archivo ARCHIVO
Control de archivo:
-B, --before-context= NUM imprime NUM comenzando con líneas de texto
-A, --after-context=NUM Imprime NUM líneas que terminan con texto
-C, --context=NUM Imprime NUM líneas de texto
-NUM es equivalente a --context=NUM
--color[=WHEN],
--color[=WHEN] Usa banderas para resaltar cadenas coincidentes;
p>
WHEN puede ser `siempre', `never' o `auto'
-U, --binary no borra el carácter CR en el final de línea (modo MSDOS)
-u, --unix-byte-offsets Cuando el carácter CR no está presente, informa los desplazamientos de bytes (modo MSDOS)
?fgrep? ya no se usa; use ?grep -F?
Sin el parámetro ARCHIVO, o ARCHIVO es -, se leerá la entrada estándar. Si hay menos de dos parámetros FILE
, el parámetro -h se utilizará de forma predeterminada. Si se selecciona alguna línea, el estado de salida es 0; de lo contrario, es 1;
Si ocurre un error y no se especifica el parámetro -q, el estado de salida es 2.
Ejemplo:
Copiar el código
El código es el siguiente:
[root@linux test]# cat abc.sh |fgrep a # Coincidencia que contiene un
¿Has leído la explicación completa de los comandos de coincidencia de texto de Linux grep y fgrep? También quieres leer:
1. Explicación detallada del comando grep de Linux
2 Análisis completo del uso de expresiones regulares en el comando grep de Linux
3. Cómo utilizar el comando grep para buscar varias palabras en Linux
4. Qué comandos de Linux suelen utilizar los desarrolladores