J'ai ce code, que je souhaite le remplacement d'un motif spécifique, mais pas de remplacement multi-lieux.
echo "ss qq" | sed ":loop; s/ss/qq/g; s/qq/dd/g; t loop;"
4 Réponses :
Whish, ce serait p>
qq dd p> blockQuote>
Ensuite, vous faites la substitution dans l'ordre d'inverser: p>
Changer
SED "S / SS / QQ / g; S / QQ / DD / G;" CODE> ->
SED "S / QQ / DD / G; S / SS / QQ / g; " code> p>
comme pour "pourquoi ça se passe": SED prend la ligne d'entrée par ligne, puis applique chaque commande séquentiellement. Cela devient plus clair si vous regardez la sortie de débogage de GNU SED (4.6 ou plus récent) pour votre commande:
$ sed --debug 's/ss/qq/g;s/qq/dd/g' <<< 'ss qq' SED PROGRAM: s/ss/qq/g s/qq/dd/g INPUT: 'STDIN' line 1 PATTERN: ss qq # Pattern space before first command is applied COMMAND: s/ss/qq/g MATCHED REGEX REGISTERS regex[0] = 0-2 'ss' PATTERN: qq qq # Pattern space before second command is applied COMMAND: s/qq/dd/g MATCHED REGEX REGISTERS regex[0] = 0-2 'qq' PATTERN: dd dd END-OF-CYCLE: dd dd
@ M.TEE Il nécessite GNU SED 4.6 ou plus récent, mais le principe est identique - la sortie de débogage est juste pour l'illustration.
Peut-être que c'est le comportement de la commande Ceci transformera tout y /// code> que vous recherchez:
s code> dans
q code> et tous
q code> dans
d code> caractère par caractère. p> p>
Ceci pourrait fonctionner pour vous (GNU SED):
sed 's/ss/\n/g;s/qq/dd/g;s/\n/qq/g' file
SED CODE> Les commandes séparées du semi-colon sont exécutées consécutivement, c'est la raison. Voir Ce fil qui peut fonctionner pour vous.
Essayez la solution Publiée ici: Stackoverflow.com/a/26568996/6515775
Si seulement une seule lettre (non Word) doit être modifiée, vous pouvez utiliser
tr code>:
écho "ss qq" | tr SQ QD code> donne
qq dd code>