Usos de exemplo do comando grep de Linux

Introdución

O comando grep de Linux úsase como método para filtrar a entrada.

GREP significa "Global Regular Expression Printer" e, polo tanto, para usalo de forma efectiva, debería ter algún coñecemento sobre as expresións regulares.

Neste artigo, vou amosarlle unha serie de exemplos que che axudarán a comprender o comando grep.

01 de 09

Como buscar unha cadea nun ficheiro usando GREP

O comando grep de Linux.

Imaxina que tes un arquivo de texto chamado libros cos seguintes títulos de libros infantís:

Para atopar todos os libros coa palabra "O" no título usarías a seguinte sintaxe:

grep Os libros

Os seguintes resultados serán devoltos:

En cada caso, resáltase a palabra "O".

Teña en conta que a procura distingue entre maiúsculas e minúsculas polo que se un dos títulos tiña "o" en lugar de "O" entón non se volvería.

Para ignorar o caso, pode engadir o seguinte conmutador:

grep the books --ignore-case

Tamén podes usar a opción -i como segue:

grep -i os libros

02 de 09

Buscar unha cadea nun ficheiro usando comodíns

O comando grep é moi poderoso. Podes usar unha infinidade de técnicas de correspondencia de patrón para filtrar os resultados.

Neste exemplo, mostrarémosche como buscar unha cadea nun ficheiro usando comodíns .

Imaxina que ten un ficheiro chamado lugares cos seguintes nomes de lugares escoceses:

aberdeen

aberystwyth

aberlour

inverurie

inverness

Newburgh

novo ciervo

novo galloway

glasgow

Edimburgo

Se desexa atopar todos os lugares con máis nome no nome use a seguinte sintaxe:

lugares grep inver *

O comodín de asterisco (*) significa 0 ou moitos. Polo tanto, se ten un lugar chamado Inver ou un lugar chamado Inverness, ambos se devolverían.

Outro comodín que pode usar é o período (.). Podes usar isto para coincidir cunha única letra.

lugares grep inver.r

O comando anterior atoparía lugares chamados inverurie e inverary pero non atoparían inverseira porque só pode haber un comodín entre as dúas r como se indica no único período.

O comodín de período é útil pero pode causar problemas se tes un como parte do texto que buscas.

Por exemplo, mire esta lista de nomes de dominio

Para atopar todos os about.coms só podería buscar usando a seguinte sintaxe:

grep * sobre * nomes de dominio

O comando anterior caería se a lista contiña o seguinte nome nel:

Podería, polo tanto, probar a seguinte sintaxe:

grep * about.com domainnames

Isto funcionaría a non ser que houbese un dominio co seguinte nome:

aboutycom.com

Para realmente buscar o termo about.com necesitarías escapar do punto do seguinte xeito:

grep * sobre \ .com nomes de dominio

O comodín final para mostrarche é o signo de interrogación que representa cero ou un carácter.

Por exemplo:

grep? ber locais

O comando anterior volvería aberdeen, aberystwyth ou ata berwick.

03 de 09

Buscar cadea no principio e final da liña Usar grep

O símbolo quilate (^) eo dólar ($) permítenche buscar patróns ao comezo e ao final das liñas.

Imaxina que tes un ficheiro chamado fútbol cos seguintes nomes de equipo:

Se quería atopar todos os equipos que comezaron con Manchester, usarías a seguinte sintaxe:

grep ^ Manchester equipos

O comando anterior volvería Manchester City e Manchester United pero non o FC United Of Manchester.

Alternativamente podes atopar todos os equipos que terminan con United usando a seguinte sintaxe:

grep United $ teams

O comando anterior volvería Manchester United e Newcastle United pero non o FC United Of Manchester.

04 de 09

Contando o número de partidas empregando grep

Se non quere devolver as liñas reais que coinciden cun patrón usando grep, pero só quere saber cantas existen pode usar a seguinte sintaxe:

grep -c patternfile

Se o patrón foi emparejado dúas veces, o número 2 sería devolto.

05 de 09

Atopar todos os termos que non coinciden usando grep

Imaxina que tes unha lista de topónimos cos países listados como segue:

Pode ter notado que a bahía de Colwyn non ten ningún país asociado.

Para buscar todos os lugares cun país, pode usar a seguinte sintaxe:

grep land $ lugares

Os resultados devolveríanse todos os lugares, excepto para a bahía de Colwyn.

Isto obviamente só funciona para lugares que terminan en terra (apenas científicos).

Pode invertir a selección usando a seguinte sintaxe:

grep -v terra $ locais

Isto atoparía todos os lugares que non terminaron coa terra.

06 de 09

Como atopar liñas baleiras nos ficheiros empregando grep

Imaxina que ten un ficheiro de entrada que é usado por unha aplicación de terceiros que deixa de ler o ficheiro cando atopa unha liña baleira como segue:

Cando a aplicación chegue á liña despois de Liverpool, deixará de ler o sentido de que se perde completamente a colwyn bay.

Podes usar grep para buscar liñas en branco coa seguinte sintaxe:

grep ^ $ lugares

Desafortunadamente, isto non é particularmente útil porque simplemente volve as liñas en branco.

Por suposto, pode obter unha conta do número de liñas en branco como verificación para ver se o ficheiro é válido do seguinte xeito:

grep -c ^ $ lugares

Non obstante, sería máis útil coñecer os números de liña que teñen unha liña en branco para que os poida reemplazar. Podes facelo co seguinte comando:

grep -n ^ $ lugares

07 de 09

Como buscar cadea de maiúsculas ou minúsculas usando grep

Usando grep pode determinar que liñas nun ficheiro teñen maiúsculas usando a seguinte sintaxe:

Nome do ficheiro grep '[AZ]'

Os corchetes [] permiten determinar o intervalo de caracteres. No exemplo anterior corresponde a calquera personaxe que está entre A e Z.

Polo tanto, para coincidir cos caracteres en minúsculas pode usar a seguinte sintaxe:

grep '[az]' nome do ficheiro

Se desexa emparejar só letras e non números numéricos ou outros símbolos, pode usar a seguinte sintaxe:

Nome de ficheiro grep '[a-zA-Z]'

Podes facer o mesmo con números do seguinte xeito:

Nome do ficheiro grep '[0-9]'

08 de 09

Buscando patróns repetitivos usando grep

Podes usar corchetes {} para buscar un patrón repetitivo.

Imaxina que tes un arquivo con números de teléfono como segue:

Vostede sabe que a primeira parte do número debe ser de tres díxitos e quere atopar as liñas que non coinciden con este patrón.

Do exemplo anterior, vostede sabe que [0-9] devolve todos os números nun ficheiro.

Neste caso queremos as liñas que comezan con tres números seguidos dun guión (-). Podes facelo coa sintaxe seguinte:

grep "^ [0-9] [0-9] [0-9] -" números

Como sabemos de exemplos anteriores, o carat (^) significa que a liña debe comezar co seguinte patrón.

O [0-9] buscará calquera número entre 0 e 9. Como está incluído tres veces coincide con 3 números. Finalmente hai un guión para indicar que un guión debe ter éxito nos tres números.

Ao usar os soportes encaracos pode facer a procura máis pequena do seguinte xeito:

grep "^ [0-9] \ {3 \} -" números

A barra inclínase o {soporte para que funcione como parte da expresión regular, pero en esencia o que está dicindo é [0-9] {3} o que significa calquera número entre 0 e 9 tres veces.

Os corchetes tamén poden usarse como segue:

{5,10}

{5}}

O {5,10} significa que o carácter que se busca se debe repetir polo menos 5 veces pero non máis de 10 mentres que o {5} significa que o carácter debe repetirse polo menos 5 veces, pero pode ser máis que iso.

09 de 09

Usando a saída de outros comandos Usando grep

Ata agora, analizamos a combinación de patróns dentro de ficheiros individuais, pero grep pode usar a saída doutros comandos como a entrada para a combinación de patróns.

Un excelente exemplo disto é o uso do comando ps que lista os procesos activos.

Por exemplo, execute o seguinte comando:

ps -ef

Aparecerán todos os procesos en execución no seu sistema.

Podes usar grep para buscar un proceso en execución particular do seguinte xeito:

ps -ef | grep firefox

Resumo

O comando grep é un comando fundamental de Linux e é un que vale a pena aprender, xa que fará a túa vida moito máis sinxela ao buscar arquivos e procesos ao usar o terminal.