Was bedeutet das Zeichen # in: / bin / sed -es # abc # zzz # g '?

10

Was bedeutet der #Charakter in dieser Zeile:

/bin/sed -e 's#abc#zzz#g'
Khalith Basha
quelle

Antworten:

14

Es ist ein Trennzeichen, genauso wie "/"es ist wie 's/abc/zzz/g'.

es bedeutet, nach "abc" zu suchen, es durch "zzz" zu ersetzen, mit globalem Flag, bedeutet, es für alle "abc" in der Zeile zu tun, nicht nur für das erste.

Sie können auch ein alternatives Trennzeichen für eine Musteradresse verwenden. In diesem Fall müssen Sie es jedoch maskieren, damit es richtig interpretiert wird:

sed -r '\#abc#p'
Ravexina
quelle
24

Es ist ein Trennzeichen oder Trennzeichen. Die am häufigsten verwendete ist /wie in

sed 's/old/new/' file

Sed nimmt jedoch das erste Zeichen nach den Befehlen als Trennzeichen. Sie können jedes bequeme Zeichen verwenden, zum Beispiel ...

sed 's%old%new%' file

Dies ist sehr nützlich, wenn die Datei /(oder andere herkömmliche Begrenzungszeichen) enthält. Sie können als Trennzeichen einen Charakter auswählen, von dem Sie wissen, dass Sie ihn nicht in Ihren sedAusdruck einfügen müssen, wodurch Sie viel nerviges Entkommen ersparen.

Angenommen, Sie möchten ersetzen

/ubuntu//questions

mit

/ubuntu//posts

Du könntest benutzen

sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file

Aber besser zu benutzen

sed 's|/ubuntu//questions|/ubuntu//posts|' file
Zanna
quelle
Es kann erwähnenswert sein, dass zumindest in GNU sed /in anderen Kontexten als dem s(Ersatz-) Befehl durch ein alternatives Zeichen ersetzt werden kann - in diesem Fall muss es jedoch beim ersten Mal sed '/foo/d'foosed '\#foo#d'
maskiert werden,
@steeldriver in der Tat! - Ich habe gesehen, dass Ravexina das zu seiner Antwort hinzugefügt hat, also werde ich meine vielleicht verlassen :)
Zanna
1
Es ist nicht wichtig, ob der Stream das Trennzeichen enthält. Wichtig ist, ob die Suchzeichenfolge oder die Ersatzzeichenfolge das Trennzeichen enthält.
Kasperd
@kasperd oh ja, stimmt. Ich habe leicht bearbeitet :)
Zanna
@ Zannas Antwort ist mehr auf den Punkt: Das erste Zeichen nach dem Befehl "s" bestimmt das Trennzeichen, das in diesem Befehl verwendet wird. Sie können hier jedes Zeichen verwenden. sbabebmacht das gleiche wie s/a/e/.
Rexkogitans