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.