![sedが最初の項目だけを置き換えるのではなく、すべての項目を置き換えるのはなぜですか? [コピー]](https://linux33.com/image/67341/sed%E3%81%8C%E6%9C%80%E5%88%9D%E3%81%AE%E9%A0%85%E7%9B%AE%E3%81%A0%E3%81%91%E3%82%92%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E9%A0%85%E7%9B%AE%E3%82%92%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
次のようにファイルの最初の項目を置き換えようとしますsed
。
sed -i s/he/He/ dummy.txt
最初の項目を置き換えるのではなく、すべての項目を置き換えます(何もない場合でも)/g
。
文書によると、最初の項目のみを交換する必要があります。
バージョンはsed
次のとおりです。
GNU sed version 4.1.5
私は何を逃したことがありませんか?それとも、他の実装が異なる動作をしますかsed
?
答え1
sed は入力を 1 行ずつ処理します。修飾子は、/g
1行のすべての項目を置き換えるのか、最初の項目だけを置き換えるのかに影響します。
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.
}