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
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
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
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
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.
Tags command-line bash grep awk sed