SED'de dosya yolundan nasıl kaçılır?


39

Ben değiştirmek istiyorum $fileWithPathiçinde $fileancak bu yol kaçmış değil (Bence) çünkü çalışmaz. Kaçış nasıl?

sed -i 's/${fileWithPath}/HAHA/g' $file

Yanıtlar:


71
sed -i 's|'$fileWithPath'|HAHA|g' file

Tek tırnak, bir dize değişmezini tanımlar. Değişkeni değişmezin dışına koymak, kabuğun bu kısmı genişletmesini sağlar.

Ayrıca: yolları ayrıştırmaya gidiyorsanız, sed komutunda "/" diziniyle karıştırmayan bir sınırlayıcı kullanın.


1
Eğer dikkat $fileWithPathboşluk içeriyor, yanlış model yerleştirilir.
Lekensteyn

Dosya yolları için sınırlayıcıyı değiştirme konusundaki bonus ipucunuz bir hayat kurtarıcıydı!
Shadoninja

Bence emrinde çok fazla alıntı var. Benim örneğim sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpnişe yarıyor gibi.
Léo Léopold Hertz 준영

14

Eğik çizgi içeren değişmez dizgiler için daha iyi bir yol:

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt

Bu bir Oscar'ı hak etti! Basit ve şık
Toan Nguyen

14

Değiştirme dizesinin veya desen dizisinin eğik çizgiler içerdiği durumlarda, GNU sed'in ikame komutu için alternatif bir sınırlayıcıya izin verdiği gerçeğini kullanabilirsiniz. Sınırlayıcı için ortak seçimler boru karakteridir | veya karma # - en iyi sınırlayıcı karakter seçimi genellikle işlenen dosyanın türüne bağlı olacaktır. Senin durumunda deneyebilirsin

sed -i 's#'$fileWithPath'#HAHA#g' $file

Son # 'dan sonraki' g 'karakteri , sadece ilk defa değiştirmeniz gerekiyorsa' g 'harfini kaldırmanız gerekiyorsa, dosyadaki tüm oluşumları değiştirmek için kullanılır.

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.