sedがすべてのオカレンスを置き換えないのはなぜですか?


118

このコードをbashで実行すると:

echo dog dog dos | sed -r 's:dog:log:'

それは出力を与えます:

log dog dos

どのようにしてすべての犬の出現を置き換えることができますか?


2
gグローバル置換のフラグが必要-rです。ここでもオプションは必要ありません。
Chris Seymour

回答:


188

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 sedhttp://www.gnu.org/software/sed/manual/にあります。


1
ここにsedされたGNUのコーナーケースを追加:sed -E 's,foo,bar,g'グローバルなことは行いません。あなたがそれを変えるならば、sed -E -e 's,foo,bar,g'それは働きます。
Melvyn Sopacua

23

g最後にaを付ける必要があります。これは「グローバル」を表します。

echo dog dog dos | sed -r 's:dog:log:g'
                                     ^

1
存在しないsed -rの代わりにsed -eを使用する必要があります。
ディランダニエルズ2015

1
@DylanDaniels man sedUbuntuによると、この-rオプションは「拡張正規表現を使用する」という意味です。したがって、指定されたコマンドは正常に機能しますが、拡張正規表現の機能を使用する必要はありません。
Craig McQueen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.