1
votes

Remplacer les phrases possibles par un mot dans sed?

Je veux pouvoir remplacer des phrases entières telles que:

white_phone
white; phone
white.phone
phone;white

par une seule phrase "REJETER" en fonction de la présence ou non du mot "blanc" dans la phrase. J'ai essayé d'utiliser:

sed -e 's / * white * / REJECT / g' -e 's / * white / REJECT / g' -e 's / white * / REJECT / g 'fichier

mais cela ne remplace que le mot «blanc» et laisse le reste de la phrase, ce que je ne veux pas.

Les phrases sont également délimitées par des tabulations, si cela vous aide.


4 commentaires

Cette question pourrait aider: stackoverflow. com / questions / 8822097 /…


Dites phrases , mais dans les 4 exemples que vous avez fournis, un pharse coïncide avec une ligne , donc je pense que vous faites en fait référence à lignes ; cependant, vous spécifiez explicitement que les phrases sont également délimitées par des tabulations . Que veux-tu dire? Que vous pouvez avoir plusieurs phrases , séparées par des tabulations, sur une seule ligne? Si tel est le cas, veuillez ajouter un exemple pour couvrir également ce cas d'utilisation.


La page d'informations sur les balises regex de Stack Overflow propose des conseils pour les débutants.


Les réponses sont bonnes, mais des explications sur pourquoi? L'explication simple est que * n'est pas en soi une expression régulière, vous avez besoin de . *


3 Réponses :


0
votes

Vous devez utiliser les backreferences sed pour cela:

sed -e 's/\(^.*\)white.*phone\(.*$\)/\1REJECT\2/g' -e 's/\(^.*\)phone.*white\(.*$\)/\1REJECT\2/g' < file 

Cette commande fonctionne pour moi avec l'entrée que vous avez fournie.


1 commentaires

Cela ne fonctionne pas avec une ligne de saisie qui ne contient pas le mot phone ; le PO dit selon que le mot "blanc" est dans la phrase , donc à moins qu'il n'ait formulé la question très mal, cette réponse ne répond pas à sa demande.



2
votes

Cela vous donnera le résultat que vous voulez, comme je comprends que vous avez besoin. Si ce n'est pas le cas, veuillez montrer un exemple de la sortie souhaitée.

sed -i 's/.*white.*/REJECT/' file


2 commentaires

g n'est pas requis


Vous avez absolument raison :) merci! Je vais modifier la réponse.



0
votes

Cela pourrait fonctionner pour vous (GNU sed):

sed '/white/cREJECT' file


0 commentaires