質問: 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」のいずれかを含む単語を削除するにはどうすればよいですか?
回答: これはどうですか?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'