
Ich habe versucht, in der Datei „mysql“ durch „MySQL“ zu ersetzen und das Ergebnis in eine andere Datei auszugeben. Wie im Bild zu sehen, /etc/snort/snort.conf
gibt es in der Datei zwei Vorkommen von .mysql
Während die Verwendung sed s/mysql/MySQL/g /etc/snort/snort.conf > test.conf
funktionierte, bewirkte das Ersetzen g
durch 1
genau dasselbe, anstatt nur das erste Vorkommen zu ersetzen. Darüber hinaus 2
ersetzte die Verwendung nichts, anstatt das zweite Vorkommen zu ersetzen.
Ich wäre für Hilfe bei der Erklärung dieses Verhaltens dankbar.
BEARBEITEN: Dies ist meine Textdatei:https://pastebin.com/X3R9HK6D
Antwort1
Das 1
Flag bedeutet, dass das erste Vorkommen der Zeichenfolge ersetzt wird aufjede Zeile, nicht in der Datei als Ganzes. Gleiches gilt für 2. Das Flag g bedeutet auch, dass alle Vorkommen in jeder Zeile ersetzt werden. Es passiert einfach, dass dadurch auch alle Vorkommen in der Datei ersetzt werden.
$ 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