4

ファイル内の文字列を検索し、その文字列を含む行を削除するための次のコードがあります。

echo `sed  /$string/d  file.txt` > file.txt

問題は、最初にfile.txtに次のものが含まれている場合です。

a
b
c

「a」(string = a)を削除すると、file.txtは次のようになります。

b c

それ以外の

b
c

誰かが私を助けることができますか?

4

4 に答える 4

10

これはバックティックが原因です。代わりにこれを行ってください:

sed -i /$string/d  file.txt

これをインプレースで実行する場合は、ファイルを読み取る前に、を使用-ised>ファイルを破棄する必要があることに注意してください。sed

于 2012-07-25T02:20:48.333 に答える
3

echoラップは必要ありません。次のことを試してください。

sed -i '/a/d' file.txt
于 2012-07-25T02:22:08.433 に答える
2

コマンドの出力を引用する必要があります。

echo -n " sed /$string/d file.txt"> file.txt

于 2012-07-25T02:23:31.460 に答える
1

sedにはインプレース編集オプションがあります。あなたのシナリオでそれを使用する方が適切です。例えば

sed -i /$string/d file.txt

あなたのケースの問題については、 ``の出力が二重引用符で囲まれていないため、単語の分割はbashによって行われます。そして、改行は削除されます。この場合にエコーを使用するには、次のようにします。

echo "`sed  /$string/d  file.txt`" > file.txt
于 2012-07-25T02:34:10.703 に答える