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」を永遠の一部ではなく完全な単語にのみ一致させます。
したがって、元のオネライナーを次のように変更できます。
sed -e "$(sed 's:.*:s/\\<&\\>//g:' /path/to/wordsToRemove.txt)” /path/to/sourceFile.txt > outFile.txt
\<
およびエスケープ処理に注意してください\>
。