web-dev-qa-db-fra.com

Extraire la chaîne de chaque ligne d'un fichier

J'ai un fichier où chaque ligne contient une phrase dans laquelle un mot se trouve entre le caractère> et <. Par exemple:

Martin went shopping at >Wallmart< and lost his wallet
French food >tastes< great

Je cherche une commande à courir de la coquille qui imprimera le mot à l'intérieur ">" et "<" pour chaque ligne.

Merci d'avance.

6
ZakS

Pour awk:

awk -F '[><]' '{print $2}' file

Qui définit le séparateur de champ comme étant soit > ou < et imprime le deuxième champ qui est ce qui est entre ces deux personnages.

Pour sed:

sed 's|.*>\(.*\)<.*|\1|' file

Qui utilise le () pour imprimer ce qui se passe entre le > et quoi que ce soit à venir après et le < Et tout ce qui vient avant.

Le résultat

Wallmart
tastes
8
Nasir Riley

Qu'en est-il de grep?

grep -oP "(?<=\>).*(?=<)"  file

Sortir:

Wallmart
tastes

ÉDITER:

Après @toby Speight Commentaire, et en supposant qu'entre> et <il n'y a que des mots, pour éviter de correspondre> et <dans d'autres contextes, la commande devrait être

grep -oP "(?<=\>)\w+(?=<)"  file
11
guillermo chamorro

J'ai essayé avec la commande ci-dessous et ça a fonctionné bien

awk -F ">" '{print $2}' filename| sed  "s/<.*//g"

sortir

Wallmart
tastes

python

#!/usr/bin/python
o=open('filename','r')
for i in o:
    k=i.split('>')[1].split('<')[0].strip()
    print k

sortir

Wallmart
tastes
0
Praveen Kumar BS