2013-04-06 7 views
75

私はbashでこのコードを実行した場合:なぜsedはすべてのオカレンスを置き換えないのですか?

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

それが与える出力:

log dog dos 

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

+2

で利用可能である、あなたはどちらか、ここで' -r'オプションは必要ありません。 。 –

答えて

122

SEDはパターンバッファの内容のグローバル置換を実行するようにあなたがg修飾子を追加する必要があります:

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のための公式ドキュメントは、あなたがグローバル置換のための `G`フラグが必要http://www.gnu.org/software/sed/manual/

+0

ありがとう、それは働いた:) – niagr

18

あなたが最後にgを配置する必要があり、それは「グローバル」の略:

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

存在しないsed -rの代わりにsed -eを使用する必要があります。 –

+0

@DylanDaniels Ubuntuの 'man sed'によれば' -r'オプションは "拡張正規表現を使う"を意味します。したがって、指定されたコマンドは正常に機能しますが、拡張正規表現の機能は必要ありません。 –

関連する問題