sed 文件比较

sed 文件比较

在 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

\<请注意和的转义\>

相关内容