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.
3 Réponses :
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.
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.
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
g
n'est pas requis
Vous avez absolument raison :) merci! Je vais modifier la réponse.
Cela pourrait fonctionner pour vous (GNU sed):
sed '/white/cREJECT' file
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. *