sed supprimer les lignes ne contenant pas de chaîne de caractères
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 la chaîne "texte" et ou chaîne 'bla', donc mon fichier de sortie ressemble à ceci:
some text here
blah blah 123
some other text as well
Toute allusion à la façon dont cela peut être fait en utilisant sed
?
- Doit de répondre utilisation de sed? grep permettrait de faire cela très facilement.
Vous devez vous connecter pour publier un commentaire.
Cela pourrait fonctionner pour vous:
$
:'/text$\|blah$/!d'
/
. Cela peut être réglé à n'importe quel délimiteur dans la commande de substitution par exemples#...#...#
Toutefois, lorsqu'il est utilisé pour l'appariement de la première délimiteur doit être cité.e.g délimiteur de#
utilisation\#match#d
à supprimer les lignes qui correspondent.Vous voulez imprimer seulement les lignes qui correspondent soit 'texte' ou 'blah' (ou les deux), où la distinction entre " et " et " ou " est plutôt crucial.
La
-n
les moyens de ne pas imprimer par défaut. Le premier modèle de recherche "texte", il imprime si appariés et les sauts à la ligne suivante; le second motif fait de même pour 'bla'. Si le " n " n'était pas là, puis une ligne contenant 'texte et bla" serait imprimé deux fois. Bien que je puisse utiliser juste-e '/blah/p'
, la symétrie est mieux, 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, GNUsed
n', avec-r
), alors vous pouvez vous simplifier la tâche à:-r
il ne sera probablement pas en charge{}
soit. Cela devrait fonctionner avec les anciens sed:sed '/text\|blah/!d' file
{ ... }
groupement de commandes était à la 7ème Édition de la version UNIX desed
; je ne peux pas penser comment vous pouvez trouver une version où ce n'était pas suppported.Vous pouvez simplement le faire par le biais de awk,