Je suis nouveau sur sed
et j’ai la question suivante. Dans cet exemple:
some text here blah blah 123 another new line some other text as well another line
Je veux supprimer toutes les lignes sauf celles qui contiennent soit la chaîne “text” , soit la chaîne “blah”, donc mon fichier de sortie ressemble à ceci:
some text here blah blah 123 some other text as well
Des astuces pour savoir comment cela peut être fait en utilisant sed
?
Cela pourrait fonctionner pour vous:
sed '/text\|blah/!d' file some text here blah blah 123 some other text as well
Vous voulez imprimer uniquement les lignes correspondant à «text» ou à «blah» (ou aux deux), où la distinction entre «et» et «ou» est plutôt cruciale.
sed -n -e '/text/{p;n;}' -e '/blah/{p;n;}' your_data_file
Le -n
signifie ne pas imprimer par défaut. Le premier motif recherche «texte», l’imprime s’il est apparié et passe à la ligne suivante; le deuxième modèle fait la même chose pour ‘blah’. Si le ‘n’ n’était pas là, une ligne contenant ‘text et blah’ serait imprimée deux fois. Bien que j’aie pu utiliser juste -e '/blah/p'
, la symésortinge est meilleure, surtout si vous devez étendre la liste des mots correspondants.
Si votre version de sed
prend en charge les expressions régulières étendues (par exemple, GNU sed
fait, avec -r
), vous pouvez simplifier cela pour:
sed -r -n -e '/text|blah/p' your_data_file
Vous pourriez simplement le faire grâce à awk,
$ awk '/blah|text/' file some text here blah blah 123 some other text as well