sed ersetzt alles für das erste Vorkommensargument und nichts für das zweite Vorkommen

sed ersetzt alles für das erste Vorkommensargument und nichts für das zweite Vorkommen

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.confgibt es in der Datei zwei Vorkommen von .mysql

Während die Verwendung sed s/mysql/MySQL/g /etc/snort/snort.conf > test.conffunktionierte, bewirkte das Ersetzen gdurch 1genau dasselbe, anstatt nur das erste Vorkommen zu ersetzen. Darüber hinaus 2ersetzte 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

Bildbeschreibung hier eingeben

Antwort1

Das 1Flag 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

verwandte Informationen