Wie im Beispiel versuche ich, Zeilennummern zu erhalten, die das Muster enthalten. Mein Muster enthält Schrägstriche, daher wollte ich ein benutzerdefiniertes Trennzeichen hinzufügen.
Dieser einfache funktioniert:
sed -n '/file/=' temp.txt
Die Verwendung des Trennzeichens für das Ersetzen von Zeichenfolgen funktioniert auch:
sed 's|file|gile|' temp.txt
Aber wenn ich dem ersten Beispiel ein Trennzeichen hinzufügen möchte, funktioniert dies nicht:
sed -n '|file /etc|=' temp.txt
Ich weiß, dass ich Schrägstrichen entkommen kann, aber ich würde es vorziehen, ein benutzerdefiniertes Trennzeichen hinzuzufügen. Irgendeine Idee, wie ich meinen Befehl reparieren kann?
text-processing
sed
jasiustasiu
quelle
quelle
sed -n '\|file /etc|='
Antworten:
Stéphane gab Ihnen die
sed
Lösung:Wenn Sie bereit sind, andere Tools zu verwenden, können Sie dies auch tun
Dadurch wird auch die Zeile selbst gedruckt. Um die Zeilennummer allein zu erhalten, versuchen Sie Folgendes:
Oder Sie können verwenden
perl
:Oder
awk
:quelle
In allen Kontextadressen müssen Sie das öffnende Trennzeichen umgehen, es sei denn, Sie verwenden die Standardeinstellung
/
. Alle folgenden Vorkommen, die maskiert werden, werden als Literalzeichen und nicht als Endbegrenzer behandelt.Standardtrennzeichen:
benutzerdefiniertes Trennzeichen:
Siehe die POSIX-Dokumente :
Ähnliche Beschreibung auf der GNU-
sed man
Seite:und FreeBSD
sed man
Seite:quelle