在 OSX 中,以下命令会删除模式并影响整个单词:
sed -e "$(sed 's:.*:s/&//g:' /path/to/wordsToRemove.txt)” /path/to/sourceFile.txt > outFile.txt
wordsToRemove.txt
包含:
it
for
sourceFile.txt
包含:
it was green forever for candy
outFile.txt
包含:
was green ever candy
尽管我想单独匹配“for”一词,而不是作为“forever”的一部分,但“forever”一词已匹配并已更改为“ever”。
有可能避免这种情况吗?
答案1
你可以匹配单词边界在 sed 中,通过在正则表达式中使用特殊标记\<
,\>
来实现。
例如:
$sed -e 's/\<for\>//g' < sourceFile.txt
it was green forever candy
此正则表达式仅匹配“for”作为整个单词,而不是作为forever的一部分。
因此,您可以将原来的 oneliner 更改为
sed -e "$(sed 's:.*:s/\\<&\\>//g:' /path/to/wordsToRemove.txt)” /path/to/sourceFile.txt > outFile.txt
\<
请注意和的转义\>
。