sedが最初の項目だけを置き換えるのではなく、すべての項目を置き換えるのはなぜですか? [コピー]

sedが最初の項目だけを置き換えるのではなく、すべての項目を置き換えるのはなぜですか? [コピー]

次のようにファイルの最初の項目を置き換えようとしますsed

sed -i s/he/He/ dummy.txt

最初の項目を置き換えるのではなく、すべての項目を置き換えます(何もない場合でも)/g

文書によると、最初の項目のみを交換する必要があります。

バージョンはsed次のとおりです。

GNU sed version 4.1.5

私は何を逃したことがありませんか?それとも、他の実装が異なる動作をしますかsed

答え1

sed は入力を 1 行ずつ処理します。修飾子は、/g1行のすべての項目を置き換えるのか、最初の項目だけを置き換えるのかに影響します。

echo hehe | sed s/h/H/
echo hehe | sed s/h/H/g

ファイルの最初の項目のみを置き換えるには、次のように使用します。

s/h/H/            # Replace.
ta                # Go to a if s/// worked.
b                 # Otherwise, start the next cycle.
:a { n            # Process the next line.
     ba           # Go to a.
}

関連情報