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.