it-mure.jp.net

sedの部分的な文字列に一致するすべての単語を削除します

次の行があると仮定します。

group blue:green yellow green redtomblue black !greyTOMwhilte !purple redblue

Sedを使用して、文字列「tom」または「TOM」を含むすべての単語を削除する必要があります。

私はここまで到達することができました:

sed 's/^ *\(.*\)[!]*[A-Za-z0-9_]*[tT]\{1\}[oO]\{1\}[mM]\{1\}[A-Za-z0-9_]*\(.*\)/\1 \2/g'

ただし、これはlastオカレンスのみを削除し、すべてを削除するわけではありません。上記の私の例を使用すると、結果は次のようになります。

group blue:green yellow green redtomblue black !grey  !purple redblue

sedを使用して、特定の部分文字列「tom」または「TOM」のいずれかを含む単語を削除するにはどうすればよいですか?

2
Sims

これはどうですか?

sed 's/\S*\(tom\|TOM\)\S*//g'

それぞれsedの非GNUバージョンでは、これは機能するはずです。

sed 's/[a-zA-Z0-9_!]*[Tt][Oo][Mm][a-zA-Z0-9_!]*//g'

これにより、すべてのwords(つまり、0個以上の非空白文字で始まる文字列(\S)の後にtomまたはTOMが続き、空の文字列を含む0個以上の非空白文字)。
おそらく、ダブルスペースも削除する必要があります。

sed 's/\S*\(tom\|TOM\)\S*//g;s/\(\s\)\s*/\1/g'
2
bmk