sedコマンドは、/、\文字を含む文字列を削除します。

sedコマンドは、/、\文字を含む文字列を削除します。

私は文字列を持っています

/abc/gef        \*(cse,fff)

ファイルから削除するには、文字列パターン全体が一致する必要があります。以下を試してください。

sed -i '//abc/gef        \*(cse,fff)/d' filename

ただし、これによりエラーが発生します。

sed: -e 式 #1, char xx: sed の最新バージョンが必要です。

また、成功せずに次のオプションを試しました。

sed -i '/\/abc\/gef        \*(cse,fff)/d' filename
sed -i 's|/abc/gef        \*(cse,fff)||g' filename

正しいコマンドは何ですか?

ベストアンサー1

以下はGNU sedバージョン4.5と4.7で動作し、この文字列を含むすべての行を削除します。

sed '/\/abc\/gef        \\\*(cse,fff)/d' file

文字列の2つのインスタンスをエスケープ\して区切り文字として扱わないようにする必要があります。それ以外の場合、区切り文字は前の文字に展開されます。後者は文字列と一致しません。/*f

sフル行ではなくファイル全体から文字列自体のみを削除したい場合は、別の文字を区切り文字として受け入れるオプションを使用することもできます。

sed 's|/abc/gef        \\\*(cse,fff)||g' file

|エスケープする必要がないように区切り記号として機能します/

要件を満たしていることを確認したら、ファイルを内部で編集するには、次のものを使用できます-i

sed -i '/\/abc\/gef        \\\*(cse,fff)/d' file

sed -i 's|/abc/gef        \\\*(cse,fff)||g' file

編集:質問の文字列が最初に投稿されたときとは異なるため、回答を更新しました。

おすすめ記事