2016-04-04 21 views
1

ファイルから文字列を削除したい。この文字列はユーザ​​ーによって提供されます。私は動作しなかった次のコマンドを試しました。bashのファイルから文字列を削除する方法

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

私は二重引用符( "")も使用しませんでした。しかし、それは動作しませんでした。

あなたは私を助けてくれますか?

+0

あなたは、文字列を削除したいと述べたが、あなたが使用したコマンドは、文字列が入っている行全体を削除します。これは、何よりも異なる結果です。あなたは表現しました。どちらが望ましいですか? – SaintHax

+0

この場合、行全体は文字列 –

答えて

3

あなたは使用することができます。

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

しかしinputは任意の正規表現の特殊文字が含まれていないことを確認してください。 index機能付き

awkが原因非正規表現に、より安全かもしれません:

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

ありがとうございます。出来た –

1

問題は、単一引用符の内側に入れたときに変数が展開されないことです。

ですから、二重引用符を使用する必要があります。

は、元のファイルはxyz.txt.bakとして保持され、変更されたファイルはxyz.txtになります。

バックアップをしたくない場合は、次の

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