Je suis nouveau à 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 souhaite supprimer toutes les lignes sauf celles contenant l'une des deux chaînes 'text' et ou 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 souhaitez imprimer uniquement les lignes qui correspondent à "texte" ou à "bla" (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 'text', l'imprime s'il est mis en correspondance et passe à la ligne suivante; le second motif fait la même chose pour 'blah'. Si le "n" n'y était pas, une ligne contenant "text et blah" serait imprimée deux fois. Bien que j'aurais pu utiliser seulement -e '/blah/p'
, La symétrie est meilleure, surtout si vous avez besoin d'étendre la liste des mots correspondants.
Si votre version de sed
prend en charge les expressions régulières étendues (par exemple, GNU sed
, avec -r
)), Vous pouvez simplifier la procédure. à:
sed -r -n -e '/text|blah/p' your_data_file
Vous pouvez simplement le faire à travers awk,
$ awk '/blah|text/' file
some text here
blah blah 123
some other text as well