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
Imaxina que tes un arquivo de texto chamado libros cos seguintes títulos de libros infantís:
- Robin Hood
- Caperucita Vermella
- Peter Pan
- Goldilocks e os tres osos
- Brancaneves e os sete ananos
- Pinnochio
- O gato no sombreiro
- Os tres pequenos porcos
- O Gruffalo
- Charlie e a fábrica de chocolate
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:
- Goldilocks e os tres osos
- Brancaneves e os sete ananos
- O gato no sombreiro
- Os tres pequenos porcos
- O Gruffalo
- Charlie e a fábrica de chocolate
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
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- dailylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
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:
- dailylinuxuser.com/about.html
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:
- Blackpool
- Liverpool
- Manchester City
- Cidade de Leicester
- Manchester United
- Newcastle United
- FC United Of Manchester
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:
- aberdeen escocia
- escocés glasgow
- liverpool inglaterra
- bahía de colwyn
- londres inglaterra
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:
- aberdeen escocia
- inverness escocia
- liverpool inglaterra
- bahía de colwyn bay
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:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
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