Comment faire de sed supprimer les lignes ne correspondant pas par la substitution d'un
En gros, je veux faire ceci:
cat file | grep '<expression>' | sed 's/<expression>/<replacement>/g'
sans avoir à écrire l'expression deux fois:
cat file | sed 's/<expression>/<replacement>/g'
Est-il un moyen de dire sed à ne pas imprimer les lignes qui ne correspondent pas à l'expression régulière dans la commande de substitution?
- Utilisez l'option-n (comme dans
sed -n
) pour supprimer la production et de l'utilisation p l'option (à côté de votre g comme dans/g;p
pour imprimer uniquement les lignes où les changements ont lieu. - cela ne semble pas fonctionner
- Salut Ropez, j'ai mis la réponse dans la section réponse pour une meilleure mise en forme.
Vous devez vous connecter pour publier un commentaire.
Dire que vous avez un fichier qui contient le texte que vous souhaitez remplacer.
Si vous souhaitez modifier Un à un puis idéalement, nous ne les suivants: -
Mais si vous ne voulez pas d'obtenir des lignes qui ne sont pas touchés avec la substitution, vous pouvez utiliser la combinaison de n et de p comme suit -
Cela pourrait fonctionner pour vous:
Ou
;}
est la norme dans de nombreux réseaux de discussion ......g;p}
ne pouvait fonctionner que sur gnu sed, mais la façon dont je l'ai mis dans ma réponse est la norme, au meilleur de ma connaissance.;
est standard:Command verbs other than {, a, b, c, i, r, t, w, :, and # can be followed by a semicolon, optional <blank>s, and another command verb. However, when the s command verb is used with the w flag, following it with another command in this manner produces undefined results.
, de sorte que ces "autres" sed implémentations sont cassé 🙂Comment sur:
Va supprimer filtres à partir de l'entrée. Bien sûr, ce qui est l'opposé de ce que vous voulez, mais peut-être vous pouvez faire un en face de l'expression régulière?
S'il vous plaît pas que je ne suis pas complètement sûr de la syntaxe, utilisé seulement quelques fois il y a quelques temps.