ファイル内の文字列を検索し、その文字列を含む行を削除するための次のコードがあります。
echo `sed /$string/d file.txt` > file.txt
問題は、最初にfile.txtに次のものが含まれている場合です。
a
b
c
「a」(string = a)を削除すると、file.txtは次のようになります。
b c
それ以外の
b
c
誰かが私を助けることができますか?
これはバックティックが原因です。代わりにこれを行ってください:
sed -i /$string/d file.txt
これをインプレースで実行する場合は、ファイルを読み取る前に、を使用-i
しsed
て>
ファイルを破棄する必要があることに注意してください。sed
echo
ラップは必要ありません。次のことを試してください。
sed -i '/a/d' file.txt
コマンドの出力を引用する必要があります。
echo -n " sed /$string/d file.txt
"> file.txt
sedにはインプレース編集オプションがあります。あなたのシナリオでそれを使用する方が適切です。例えば
sed -i /$string/d file.txt
あなたのケースの問題については、 ``の出力が二重引用符で囲まれていないため、単語の分割はbashによって行われます。そして、改行は削除されます。この場合にエコーを使用するには、次のようにします。
echo "`sed /$string/d file.txt`" > file.txt