web-dev-qa-db-fra.com

Extraire un mot après un mot spécifique sur la même ligne

Comment puis-je extraire un mot qui vient après un mot spécifique sous Linux (csh)? Plus précisément, j'ai un fichier qui a une seule ligne qui ressemble à ceci:

[some useless data] --pe_cnt 100 --rd_cnt 1000 [some more data]

Je veux extraire le nombre 100 qui est après le --pe_cnt Word. Je ne peux pas utiliser sed car cela ne fonctionne que si vous souhaitez extraire une ligne entière. Peut-être que je peux utiliser awk?

De plus, j'ai plusieurs fichiers qui ont des valeurs différentes au lieu de 100 donc j'ai besoin de quelque chose qui extrait la valeur mais qui ne dépend pas de la valeur.

16
Rahul

Avec awk:

awk '{for(i=1;i<=NF;i++) if ($i=="--pe_cnt") print $(i+1)}' inputFile

En gros, bouclez sur chaque mot de la ligne. Lorsque vous trouvez le premier que vous recherchez, prenez le mot suivant et imprimez-le.

Avec grep:

grep -oP "(?<=--pe_cnt )[^ ]+" inputFile
31
jaypal singh

Vous pouvez utiliser sed. Créez simplement un groupe de souhaits que vous souhaitez associer et remplacez toute la ligne par le groupe:

sed -n 's/^.*pe_cnt\s\+\([0-9]\+\).*$/\1/p' file
6
ctn

S'il y a un caractère à espace unique entre --pe_cnt et 100, vous pourrez peut-être utiliser les assertions lookahead et lookbehind

grep -oP '(?<=--pe_cnt\s)\d+(?=\s+--rd_cnt)'
1
iruvar