web-dev-qa-db-fra.com

Imprimez tout en ligne après le match

J'ai un grand fichier texte qui contient une chaîne unique au milieu. Ce que je veux faire, c'est tout imprimer APRÈS la chaîne en utilisant grep.

cat textfile | grep "target_string"
This highlights target_string but prints the whole file

cat textfile | grep -o "target_string"
This prints only target_string

cat textfile | grep -o "target_string*"
This prints only target_string

Comment puis-je tout imprimer après target_string et rien avant?

26
twk789

Vous avez oublié le '.':

    cat textfile | grep -o "target_string.*"
21
ysdx

Avec GNU grep, essayez -B0 -A999999999 ou similaire. Un meilleur choix pourrait être awk:

awk '/target_string/ {seen = 1}
     seen            {print}'

Si (la spécification de votre problème n'est pas claire) vous n'avez pas non plus besoin d'imprimer la ligne correspondante, sed est encore plus court:

sed '1,/target_string/d'
28
geekosaur

Étrangement, la réponse acceptée a imprimé toute la ligne, où je voulais juste toutes les informations après la chaîne cible. Cela a fonctionné pour moi:

sed -n 's/target_string//p' filename

Adapté de cet article

26
chimeric

Cela imprimera tout après chaque match, sur cette même ligne uniquement:

Perl -lne 'print $1 if /target_string(.*)/' textfile

Cela fera de même, sauf qu'il imprimera également toutes les lignes suivantes:

Perl -lne 'if ($found){print} else{if (/target_string(.*)/){print $1; $found++}}' textfile
2
Chris Koknat