web-dev-qa-db-fra.com

Grep une ligne qui commence et finit par un caractère prédéfini

J'essaie d'extraire une ligne d'un fichier file.txt qui ressemble à ceci:

>This is line 1.</li>
>This is line 2.</li>
>This is line 3.</li>
>This is line 4.</li>

J'ai besoin de récupérer du contenu qui commence par > et se termine par </li> afin que le résultat soit This is line 1.This is line 2. et ainsi de suite. J'ai examiné ceci dans le forum mais n'ai pas trouvé la solution. Cette solution n'a pas non plus fonctionné.

Je dois finalement aller chercher des lignes sur une page Web. Je vais donc commencer par curl webpage et ensuite utiliser la commande grep pour grep cette ligne qui commence par > et se termine par </li>.

Merci.!

1
S Andrew

Cela devrait suffire:

grep '^>.*</li>$' input-file

Les ^ et $ permettent de s'assurer que ces parties sont ancrées au début et à la fin des lignes, respectivement.

Vous pouvez aussi faire:

grep -x '>.*</li>' input-file

-x recherche une correspondance exacte: la ligne entière doit correspondre au modèle (ce qui implique que ^ et $ sont placés autour du modèle).

4
Olorin

C'est le fichier d'entrée:

$ cat /tmp/tmp.txt
>This is line 1.</li>
invalid line 1
>This is line 2.</li>
>This is line 3.</li>
invalid line 2

>This is line 4.</li>
last invalid line

Utiliser grep et awk pour extraire les chaînes souhaitées:

$ cat /tmp/tmp.txt | grep -E '>*</li>' | awk -F\> '{ print $2 }' | awk -F\< '{ print $1 }'
This is line 1.
This is line 2.
This is line 3.
This is line 4.
0
boardrider