Sedと正規表現

Sedと正規表現

正規表現に問題がありますsed

ファイルの1行を変更したいので、次のようにしました。

sed -i '3s/.*/my new text in file/' file.txt

この拡張はファイルの3行目を見つけて変更します。

この解決策は良くありませんが、良い一般的な拡張を構築する方法がわかりません。ファイルで「ホスト」という単語を探しているとしましょう。良い一般的な拡張を構築する方法は?

私は以下を試しました:

sed -e '<\H...s>\ /my new text in file/' file.txt'。

私は何が間違っていましたか?

ベストアンサー1

ほとんど誰も使用しないようですが、行全体を置き換えるための(変更)コマンドをsed提供します。c

c\ 
text

    Delete the lines matching the address or address-range, and 
    output the lines of text which follow this command.

たとえば、次のように使用できます。

sed '/\bHost\b/c\                      
my new text
' file

単語全体を含む行Hostをに変更しますmy new text。この\bシーケンスは単語の境界を表しているため、部分一致を除外します。たとえば、HostnameGNU sedでは、ieの代わりに\<新しいテキストを行に入れることもできます。\>\<Host\>

sed '/\<Host\>/cmy new text' hostfile

これが式で目指しているようです。実際のcコマンドを見逃して、単語境界指定子を逆さまに持ってきた。つまり、代わり<\. . .>\\<. . .\>

おすすめ記事