このコードをbashで実行すると:
echo dog dog dos | sed -r 's:dog:log:'
それは出力を与えます:
log dog dos
どのようにしてすべての犬の出現を置き換えることができますか?
このコードをbashで実行すると:
echo dog dog dos | sed -r 's:dog:log:'
それは出力を与えます:
log dog dos
どのようにしてすべての犬の出現を置き換えることができますか?
回答:
g
修飾子を追加して、sedがパターンバッファーの内容のグローバル置換を実行するようにする必要があります。
echo dog dog dos | sed -e 's:dog:log:g'
sedに関する素晴らしいドキュメントについては、http: //www.grymoire.com/Unix/Sed.htmlをチェックしてください。このグローバルフラグについては、ここで説明します。http://www.grymoire.com/Unix/Sed.html#uh-6
の公式ドキュメントGNU sed
はhttp://www.gnu.org/software/sed/manual/にあります。
sed -E 's,foo,bar,g'
グローバルなことは行いません。あなたがそれを変えるならば、sed -E -e 's,foo,bar,g'
それは働きます。
g
最後にaを付ける必要があります。これは「グローバル」を表します。
echo dog dog dos | sed -r 's:dog:log:g'
^
man sed
Ubuntuによると、この-r
オプションは「拡張正規表現を使用する」という意味です。したがって、指定されたコマンドは正常に機能しますが、拡張正規表現の機能を使用する必要はありません。
g
グローバル置換のフラグが必要-r
です。ここでもオプションは必要ありません。