1

unixでsedを使って学習しています。多くの行を含むファイルがあり、文字列 (例) alex、eva、および tom を含む行を除くすべての行を削除したいと考えています。使えると思います

sed '/alex|eva|tom/!d' filename

ただし、機能しないことがわかりました。行と一致しません。「alex | eva | tom」に一致するだけです...

sed '/alex/!d' filename

動作します。

sed を使用して複数の単語を含む行を選択する方法を知っている人はいますか?

さらに、「sed '/(alex)|(eva)|(tom)/!d' file」のような括弧付きでは機能せず、3 つの単語すべてを含む行が必要です。

4

5 に答える 5

2

以下を使用できます。

 sed -r '/alex|eva|tom/!d' filename

または Mac の場合:

 sed -E '/alex|eva|tom/!d' filename

-i.bakインライン編集に使用します。

 sed -i.bak -r '/alex|eva|tom/!d' filename
于 2013-10-07T02:18:16.727 に答える
1

\|の代わりに使用する必要があり|ます。

編集: これは sed の一部のバリアントには当てはまり、他のバリアントには当てはまらないようです。

于 2013-10-07T02:14:12.407 に答える
0

これはうまくいくかもしれません(GNU sed):

sed -nr '/alex/G;/eva/G;/tom/G;s/\n{3}//p' file

このメソッドは、値の範囲が存在することを許可します。つまり、2 つ以上のリストが必要な場合は、次を使用します。

sed -nr '/alex/G;/eva/G;/tom/G;s/\n{2,3}//p' file
于 2013-10-08T06:06:41.237 に答える