sed ile değişmez dizge - girdi dosyası değil


97

Bu kolay olmalı: sed'i bir girdi dosyası değil, değişmez bir dizgeye karşı çalıştırmak istiyorum . Nedenini merak ediyorsanız, örneğin değişkenlerde depolanan değerleri düzenlemek, mutlaka metin verileri değil.

Ben yaparken:

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

A, B, C, A ',' B ',' C olarak değiştirmek istediğim gerçek değerdir

alırım

Can't open A,B,C

Sanki A, B, C'nin bir dosya olduğunu düşünüyor.

Yankılanması için borulamayı denedim:

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

Bir uyarı alıyorum.

Bunu yapmanın doğru yolu nedir?

Yanıtlar:


152

Tek bir tırnak çakışması var, bu yüzden şunu kullanın:

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

Kullanılıyorsa siz de yapabilirsiniz ( <<<a here-string):

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

Ama değil

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

çünkü seddosya (lar) ı bağımsız değişken (ler) olarak bekliyoruz

DÜZENLE :

Eğer kullanırsan veya diğerleri:

echo string | sed ...

1
garip, benim için işe yaramıyor ... bunun bir süre önce yayınlandığını fark ettim, ancak sorun buysa tuhaf kullanımdan kaldırılıyor
süper kahraman


5

Bir bash komut dosyasında değişkenleri kullanan sürümüm:

Ters eğik çizgileri bulun ve eğik çizgilerle değiştirin:

input="This has a backslash \\"

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

echo "$output"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.