sed com string literal - não é arquivo de entrada

92

Isso deve ser fácil: eu quero executar o sed em uma string literal, não em um arquivo de entrada. Se você quer saber por quê, é para, por exemplo, editar valores armazenados em variáveis, não necessariamente dados de texto.

Quando eu faço:

sed 's/,/','/g' "A,B,C"

onde A, B, C é o literal que desejo alterar para A ',' B ',' C

eu recebo

Can't open A,B,C

Como se pensasse que A, B, C são um arquivo.

Tentei canalizar para eco:

echo "A,B,C" | sed 's/,/','/g' 

Eu recebo um prompt.

Qual é a maneira certa de fazer isso?

anfibiente
fonte

Respostas:

149

Você tem um conflito de aspas simples, então use:

 echo "A,B,C" | sed "s/,/','/g"

Se estiver usando , você também pode ( <<<é a here-string):

sed "s/,/','/g" <<< "A,B,C"

mas não

sed "s/,/','/g"  "A,B,C"

porque sedesperar arquivo (s) como argumento (s)

EDITAR :

se você usar ou qualquer outro:

echo string | sed ...
Gilles Quenot
fonte
1
estranho, não funciona para mim ... percebendo que isso foi postado há algum tempo, mas estranho depreciação se esse for o problema
super
10

Funciona como você deseja:

echo "A,B,C" | sed s/,/\',\'/g
ferrants
fonte
5

Minha versão usando variáveis ​​em um script bash:

Encontre todas as barras invertidas e substitua-as por barras:

input="This has a backslash \\"

output=$(echo "$input" | sed 's,\\,/,g')

echo "$output"
Phyatt
fonte