sed を使用して 1 つの単語を見つけ、別の単語に置き換えます。

sed を使用して 1 つの単語を見つけ、別の単語に置き換えます。

ファイルに「mode v」などの単語があります。 「mode sv」に変えたいです。しかし、パターンの後にスペースがあるため、すべての努力は失敗しました。

答え1

sedこのように検索して置き換えることができます。

$ sed 's/mode v/mode sv/g'

はい

次のサンプルファイルがあるとしましょう。

$ cat afile.txt 
mode v modev mode v
blah
blah blah modev mode
blah
modev mode v

sedファイルを検索/交換し、次のようにバックアップを維持するために使用できます。

$ sed -i.bak 's/mode v/mode sv/g' afile.txt 

これで2つのファイルがあります。

$ ls -ltr | grep afile
-rw-rw-r--. 1 slm slm      64 Sep 23 20:13 afile.txt.bak
-rw-rw-r--. 1 slm slm      67 Sep 23 20:15 afile.txt

元のテキストが次のように修正されました。

$ cat afile.txt
mode sv modev mode sv
blah
blah blah modev mode
blah
modev mode sv

メモ:保証された単語境界で必要に応じてmode v検索にサフィックスを追加できます\b

$ sed -i.bak 's/mode v\b/mode sv/g' afile.txt 

答え2

コメントの解決策は、modeが行の最初の単語であり、「mode」の後のすべての単語を「sv」に置き換える場合にのみ機能します。あなたの質問で見ると、これはあなたの意図ではないと思います。複雑にする理由がなく、単純に保つ

sed 's/mode /mode s/g'

動作する必要があります。または

sed s/"mode "/"mode s"/g

関連情報