sedを使用して単語全体を見つけて置き換えます。

sedを使用して単語全体を見つけて置き換えます。

私のファイルには次のテキストブロックがあります。

test3.legacy test4.legacy test3 test3.kami

test3ただ全体的に検索して何でも交換したいです。残念ながら、すべての試みが削除されました。テスト3test3.legacytest3.kami。私は試した:

sed 's/^test3://g' myfile.txt
sed 's/\btest3\b//g' myfile.txt
sed 's/\<test3\>//g' myfile.txt

まったく運がありません。この問題を解決する方法についてのアイデアはありますか?

編集する:ほとんどの試みの結果は次のとおりです。.legacy test4.legacy .kami

ベストアンサー1

これはあなたが望むものですか?

$ sed 's/\(^\| \)test3\( \|$\)/\1/g' file
test3.legacy test4.legacy test3.kami

これは次のことを意味します。

substitute
   (^ start of line OR space)
   test3
   (space OR end of line)
with match 1 (AKA space or start of line)

修正する:

良い人がとても優雅に表現したようにツイートをサイトに埋め込むこれはいくつかの状況を解決しません。ポータブル部分も強調してください。バラより次のことに答えてください。

GNUバリアントは次のことを行います。(希望)、例:

sed 's/\(^\| \)\(test3\( \|$\)\)*/\1/g'
# Or perhaps:
sed 's/\(^\| \)\(test3\( \|$\)\)\+/\1/g'

重複一致を処理します。あるいは、人が複数のスペースなどを処理することもできます。入力によって異なります。

オーフード


あるいは、おそらく(ただ出発点に):

sed 's/\Wtest3\W/ /g'

私の考えではこれではないようです:

$ sed 's/test3\.\?[^ ]* *//g' file
test4.legacy

おすすめ記事