GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Finden Sie die Zeilennummer, die das Muster enthält, mit benutzerdefiniertem Regex-Trennzeichen?

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.

Dieses einfache funktioniert:

sed -n '/file/=' temp.txt

Die Verwendung von Trennzeichen zum Ersetzen von Zeichenfolgen funktioniert auch:

sed 's|file|gile|' temp.txt

aber wenn ich dem ersten Beispiel ein Trennzeichen hinzufügen möchte, ist dies nicht der Fall:

sed -n '|file /etc|=' temp.txt

Ich weiß, dass ich Schrägstriche maskieren kann, aber ich würde lieber ein benutzerdefiniertes Trennzeichen hinzufügen. Irgendeine Idee, wie ich meinen Befehl reparieren kann?

Akzeptierte Antwort:

Stéphane hat dir den sed gegeben Lösung:

sed -n  '|file /etc|=' file 

Wenn Sie bereit sind, andere Tools zu verwenden, können Sie dies auch tun

grep -n 'file /etc' file

Das wird auch die Zeile selbst drucken, um nur die Zeilennummer zu bekommen, versuchen Sie:

grep -n 'file /etc' file | cut -d: -f 1

Oder Sie können perl verwenden :

perl -lne 'm|file /etc| && print $.' file 

Oder awk :

awk '$0 ~ "file /etc" {print NR}'

Linux
  1. Verwenden der Kraft in der Linux-Befehlszeile

  2. Das Konzept von 'Hold space' und 'Pattern space' in sed

  3. Verwenden von sed zum Teilen einer Zeichenfolge mit einem Trennzeichen

  4. Wie kann ich die Anzahl der Ordner in einem Laufwerk unter Linux zählen?

  5. Wie finde ich die Zeilennummer in Bash, wenn ein Fehler aufgetreten ist?

Lernen Sie, den Sed-Texteditor zu verwenden

So finden Sie die Portnummer eines Dienstes in Linux

Mehrzeiliger Musterabgleich mit Sed, Awk oder Grep?

Finden Sie nicht rekursiv, wenn Sie ein Muster in der Befehlszeile erhalten?

Unix Sed Tutorial:Suchen und Ersetzen von Text in einer Datei mit RegEx

Warum verwendet sed nicht standardmäßig den erweiterten Regex-Modus?