sed dengan string literal - bukan file input

97

Ini seharusnya mudah: Saya ingin menjalankan sed terhadap string literal, bukan file input. Jika Anda bertanya-tanya mengapa, itu untuk, misalnya mengedit nilai yang disimpan dalam variabel, tidak harus data teks.

Ketika saya melakukan:

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

dimana A, B, C adalah literal yang ingin saya ubah menjadi A ',' B ',' C

saya mendapat

Can't open A,B,C

Seolah-olah ia menganggap A, B, C adalah sebuah file.

Saya mencoba menyalurkannya ke gema:

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

Saya mendapat prompt.

Bagaimana cara yang benar untuk melakukannya?

amfibi
sumber

Jawaban:

152

Anda memiliki konflik tanda kutip tunggal, jadi gunakan:

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

Jika menggunakan , Anda juga dapat melakukan ( <<<adalah here-string):

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

tapi tidak

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

karena sedmengharapkan file sebagai argumen

EDIT :

jika Anda menggunakan atau yang lainnya:

echo string | sed ...
Gilles Quenot
sumber
1
aneh, tidak berhasil untuk saya ... menyadari ini beberapa waktu yang lalu ini telah diposting, tetapi penghinaan aneh jika itu masalahnya
superhero
10

Bekerja seperti yang Anda inginkan:

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

Versi saya menggunakan variabel dalam skrip bash:

Temukan garis miring terbalik dan ganti dengan garis miring ke depan:

input="This has a backslash \\"

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

echo "$output"
phyatt.dll
sumber