正規表現に問題があります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
シーケンスは単語の境界を表しているため、部分一致を除外します。たとえば、Hostname
GNU sedでは、ieの代わりに\<
新しいテキストを行に入れることもできます。\>
\<Host\>
sed '/\<Host\>/cmy new text' hostfile
これが式で目指しているようです。実際のc
コマンドを見逃して、単語境界指定子を逆さまに持ってきた。つまり、代わり<\. . .>\
に\<. . .\>