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?

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 ...

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

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"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.