Bash

2016-04-04 26 views
1

'daki bir dosyadan bir dize nasıl silinir Bir dosyadan bir dize silmek istiyorum. Bu dize kullanıcı tarafından sağlanır. Çalışmayan aşağıdaki komutu denedim.Bash

read -r input 
sed -i '/"$input"/d' xyz.txt 

Çift tırnak kullanmadan denedim (""). Ama işe yaramadı.

Lütfen bana yardım eder misiniz?

sed -i "/$input/d" xyz.txt 

ama input herhangi bir düzenli ifade özel karakter içermediğinden emin olun:

+0

Sen bir dize silmek istediğiniz dedi, ama kullandığınız komut dizesi olduğunu bütün çizgi siler Bu farklı bir sonucun ne ifade ettin. Hangisi arzu edilir? – SaintHax

+0

bu durumda tüm satır –

cevap

3

kullanabilirsiniz.

awk -v input="$input" '!index($0, input)' xyz.txt > $$.temp && mv $$.temp xyz.txt 
+1

dizgisi çok teşekkürler. işe yaradı –

1

sorun tek tırnak içine koyduğunuzda değişkenler genişletilmez şudur: index fonksiyonu ile

awk nedeniyle olmayan regex güvenli olabilir.

Yani çift tırnak kullanmak gerekir:

orijinal dosya xyz.txt.bak olarak tutulacak ve modifiye dosya xyz.txt olacaktır. Eğer bir yedek istemiyorsanız

.

sed -i "/$input/ d" xyz.txt