Comment utiliser des chaînes textuelles dans sed?


Réponses:


3

Vous devriez échapper aux caractères spéciaux et utiliser un séparateur autre que "/".

sed 's#string1#string2#'

Je vois le plus souvent | en utilisant sed.
Rob

Certes, c'est une chaîne laide.
Scott C Wilson

1

Voir ce SOq:

Cette réponse à ce qui précède:

est quelque chose dont vous avez besoin, sauf que vous le feriez dans la première partie, pas la deuxième partie de s/first/second/.

Comme vous utilisez les deux ' et " dans vos commandes sed, vous devrez en échapper. Essayez de faire ceci - créez deux fichiers:

1.sed

s_"a\\c:ti]\\']x""/\\//:`~\$%#\^&"'_ _g

2.txt

"a\c:ti]\']x""/\//:`~$%#^&"'hello world m"a\c:ti]\']x""/\//:`~$%#^&"'
"a\c:ti]\']x""/\//:`~$%#^&"'this is working"a\c:ti]\']x""/\//:`~$%#^&"'
"a\c:ti]\']x""/\//:`~$%#^&"'as expected"a\c:ti]\']x""/\//:`~$%#^&"'

1.sed est le script lui-même et 2.txt est un fichier de test. Exécutez-le comme ceci pour tester:

$ sed -f 1.sed 2.txt
 hello world m 
 this is working 
 as expected 

$ 

J'espère que cela t'aides.


Quelle commande utiliser pour s'échapper? echo "a \ c: ti] \ '] x" "/ \ //:` ~ $% # ^ &' '' | sed -e '/ ([[\ /.*] \ |]) / \ \ & amp; / g 'résulte en un & gt; invite à bash.
user93200

Si vous mélangez les deux ' (devis simple) et " (double citation), vous devrez échapper quelque chose dans la chaîne. Ce n'est pas un "problème" avec sed per-se, même si vous faites juste echo "a \ c: ti] \ '] x" "/ \ //: ~$%#^&"', it will be not a complete string. E.g. you cannot do echo "abc"" and expect it to print abc "` - vous devez échapper à la ".
icyrock.com

Pourriez-vous fournir une commande pour échapper automatiquement à une chaîne donnée et préciser également comment la solution peut être affectée par l'environnement (s'exécutant dans bash ou dans cmd.exe)?
user93200

La commande dans les liens fournis vous donne cela (celui que vous avez mis dans votre premier commentaire à ma réponse). Le problème est que vous ne pouvez pas le faire comme vous le souhaitez - la contribution de echo la commande ne peut même pas arriver à la sed pour être échappé, il doit être échappé sur place pour être même imprimé par echo correctement. L'autre solution - mettre la chaîne dans le fichier - est ce qui fonctionnerait, voir ma modification. J'espère que cela fonctionnera pour vous.
icyrock.com
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.