İstediğinizi yapmak mümkün değildir sed. Bunun sürümleri bile sed, -ibir dosyayı yerinde düzenleme seçeneğini tam olarak istemediğinizi tam olarak belirttiğiniz şeyi destekler: geçici bir dosyaya yazıp dosyayı yeniden adlandırırlar. Ama belki de kullanabilirsiniz ed. Örneğin , dosyadaki tüm oluşumlarını değiştirmek fooiçin şunları yapabilirsiniz:barfile.txt
echo ',s/foo/bar/g; w' | tr \; '\012' | ed -s file.txt
Sözdizimi benzerdir sed, ancak kesinlikle aynı değildir.
Ancak, neden yeniden adlandırılmış geçici bir dosya kullanmak istemediğinizi düşünmelisiniz. Eğer bir bilgisi yoksa bile -idestekleyen sed, kolayca sizin için işi yapmak için bir komut dosyası yazabilirsiniz. Bunun yerine, sed -i 's/foo/bar/g' fileyapabilirsin inline file sed 's/foo/bar/g'. Böyle bir senaryo yazmak önemsizdir. Örneğin:
#!/bin/sh -e
IN=$1
shift
trap 'rm -f $tmp' 0
tmp=$( mktemp )
<$IN "$@" >$tmp && cat $tmp > $IN # preserve hard links
çoğu kullanım için yeterli olmalıdır.
-ignu sed'de bir seçenektir, ancak standart sed'de değildir. Ancak, içeriği yeni bir dosyaya aktarır ve sonra dosyayı istediğiniz şekilde yeniden adlandırır.