sedは最初の出現引数のすべてを置き換え、2番目の出現引数のすべてを置き換えません。

sedは最初の出現引数のすべてを置き換え、2番目の出現引数のすべてを置き換えません。

ファイル内の 'my​​sql' を 'MySQL' に置き換えて、結果を別のファイルに出力しようとしました。画像に示すように、ファイル内に/etc/snort/snort.confが 2 回出現します。mysql

を使用するとsed s/mysql/MySQL/g /etc/snort/snort.conf > test.conf機能しましたが、 をgに置き換える1と、最初の出現箇所が置き換えられるのではなく、まったく同じことが行われました。さらに、 を使用すると、22 番目の出現箇所が置き換えられるのではなく、何も置き換えられませんでした。

この動作を説明するのに助けていただければ幸いです。

編集: これは私のテキスト ファイルです:https://pastebin.com/X3R9HK6D

ここに画像の説明を入力してください

答え1

この1フラグは、文字列の最初の出現を置き換えることを意味します。各行、ファイル全体ではなく、 2 でも同様です。 g フラグも、各行のすべての出現箇所を置き換えることを意味します。 偶然にも、これによりファイル内のすべての出現箇所も置き換えられます。

$ cat > text.txt
foo foo
foo foo
$ sed s/foo/bar/1 text.txt 
bar foo
bar foo
$ sed s/foo/bar/2 text.txt 
foo bar
foo bar

関連情報