2

複数の正規表現のいずれかを含む行を削除する単一の sed コマンドを作成するにはどうすればよいでしょうか?

たとえば、ドキュメントから "/./. ::"、":: "、"::foo "、および "^^bar" を sed で削除したいとします。

今のところ、私が走るとき

 sed -ir '/ "//.//. ::|:: _|::foo_|^^bar" /d' text.file 

応答は「不明なコマンド '/'」です。

これは、正規表現の周りに内側の "s がある場合とない場合です。

 sed -ir '/ //.//. ::|:: _|::foo_|^^bar /d' text.file 

また、次のように「/」の前にエスケープ(/)を削除すると:

 sed -ir '/ "/./. ::|:: _|::foo_|^^bar" /d' text.file 

戻り値は「不明なコマンド '.'」になります。

4

2 に答える 2

1

エスケープ記号を使用する\
必要があります。パターン マッチを引用したり、アンダースコアを追加したりする必要はありません。単純に試してください。

sed -i -r '/\/.\/. ::|:: |::foo|\^\^bar/d' file.txt

また、.シンボルのエスケープを検討することもできます。それ以外の場合、ドットは任意の文字に一致します。

HTH

于 2012-07-23T07:38:54.760 に答える
0
sed '{
s/::foo_//
s/\^\^bar//
s!/./. ::!!
s/:: _//
}' input_file

パターンを含む行を完全に削除するには:

sed '{
/::foo_/d
/\^\^bar/d
\!/./. ::!d
/:: _/d
}' input_file
于 2012-07-23T05:16:45.927 に答える