Red de conocimiento informático - Aprendizaje de programación - Solución completa para los comandos de coincidencia de texto grep y fgrep de Linux

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

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

 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

@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

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

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

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

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