grep todas as cadeias de caracteres que começam com um determinado caractere e terminam com outro caractere

2

Eu preciso grep todas as strings que começam com "[" e terminam com uma determinada string, por exemplo "um amigo". Então, todos os caracteres entre esses dois caracteres seriam mostrados também. Dada uma entrada como:

[44060]apal223reaea[55000]opoer4nr4on[95749]assad fdfdf Bhassrj sdaapald33qdq3d3da3ded[66000]dsfsldfsfldkj[77000]porpo4o4o3j3mlkfxxxx[101335]KaMMMM MMM lapa[131322]sadasds ddd apaladsdas[138133]sadasdadasddsss KMMapaldsadsadwe[150000]idhoqijdoiwjodwiejdw

A saída seria algo mentira

[44060]apal
[95749]assad fdfdf Bhassrj sdaapal
[101335]KaMMMM MMM lapal
[131322]sadasds ddd apal
[138133]sadasdadasddsss KMMapal
    
por testTester 17.04.2016 / 16:19

4 respostas

5

Uso:

grep -o '\[.*apal' file.txt

Substitua file.txt pelo nome real do arquivo.

Por outro lado, se você quiser corresponder [ no início da linha:

grep -o '^\[.*apal' file.txt
    
por 17.04.2016 / 16:36
2

Tente:

grep -o '^\[.*apal$' file.txt

O comando para corresponder a um regex: ....... use grep
Para combinar apenas o regex escrito, ........ use -o
Para corresponder ao início de uma linha, ................. use ^ : ^\[
Para corresponder a qualquer caractere, use . : .*
Para corresponder ao final de uma linha, ................... use $ : apal$
Um arquivo que contém o que você deseja corresponder: file.txt

    
por 18.04.2016 / 00:15
1

Se você deseja apenas o texto entre [ e apal , perl é uma boa opção

perl -lne '/(?<=\[)(.+?)(?=apal)/ and print $1' file

Se você tem o GNU grep instalado (via homebrew por exemplo), você pode

grep -Po '(?<=\[).+?(?=apal)' file
    
por 22.04.2016 / 03:40
0

Em vez de usar o grep, é melhor usar sed.

sed 's/.*\(X.*Y\)//p' < file.txt

Substitua X pelo padrão inicial e Y pelo padrão final. Esse comando coloca no buffer do sed 1 tudo o que corresponder de X a Y. O "\ 1" no padrão de substituição imprimirá esse buffer.

Então, no seu exemplo:

sed 's/.*\(\[.*apal\)//p' < file.txt

deve fazer o truque.

    
por 17.04.2016 / 17:11