假设我有以下行:
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'
但这只会删除最后的发生,但不是全部。使用上面的例子,结果是:
group blue:green yellow green redtomblue black !grey !purple redblue
如何使用sed
删除包含特定子字符串“tom”或“TOM”的任何单词?
答案1
这个如何?
sed 's/\S*\(tom\|TOM\)\S*//g'
在非 GNU 版本中sed
应该可以工作:
sed 's/[a-zA-Z0-9_!]*[Tt][Oo][Mm][a-zA-Z0-9_!]*//g'
这将取代所有字(即以 0 个或多个非空白字符(\S
)开头的字符串,后跟tom
或TOM
以及 0 个或多个非空白字符)带有空字符串。
可能您还应该删除双空格:
sed 's/\S*\(tom\|TOM\)\S*//g;s/\(\s\)\s*/\1/g'