it-swarm.com.de

Verwenden von grep, um die Zeilennummer des ersten Auftretens einer Zeichenfolge in einer Datei abzurufen

Ich benutze Bash-Skript für Testzwecke. Während meines Tests muss ich die Zeilennummer des ersten Auftretens einer Zeichenfolge in einer Datei finden. Ich habe beide "awk" und "grep" ausprobiert, aber keiner von ihnen gibt den Wert zurück.

Awk Beispiel

#/!bin/bash
....
VAR=searchstring
...
cpLines=$(awk '/$VAR/{print NR}' $MYDIR/Configuration.xml

dies erweitert $ VAR nicht. Wenn ich den Wert von VAR verwende, funktioniert es, aber ich möchte VAR verwenden

Grep Beispiel

#/!bin/bash
...
VAR=searchstring    
...
cpLines=grep -n -m 1 $VAR $MYDIR/Configuration.xml |cut -f1 -d: 

dies ergibt die Fehlerzeile 20: -n: Befehl nicht gefunden

13
user1651888
grep -n -m 1 SEARCH_TERM FILE_PATH |sed  's/\([0-9]*\).*/\1/'

grep Schalter

-n = Zeilennummer einbeziehen

-m 1 = Eins

sed Optionen (Stream-Editor):

's/X/Y/' - X durch Y ersetzen

\([0-9]*\) - regulärer Ausdruck, der mit Ziffern übereinstimmt, die null oder mehrmals vorkamen, maskierte Klammern, die mit Regex in Klammern übereinstimmende Zeichenfolge ist das Argument\1 in Y (Ersatzzeichenfolge)

\([0-9]*\).* - .* stimmt mit jedem Zeichen überein, das null oder mehrmals vorkommt.

10
enterx

Sie benötigen $ () für die Variablensubstitution in grep

cpLines=$(grep -n -m 1 $VAR $MYDIR/Configuration.xml |cut -f1 -d: )
8
Raul Andres

Versuchen Sie etwas wie:

awk -v search="$var" '$0~search{print NR; exit}' inputFile

In awk interpretiert / /awk variable wörtlich. Sie müssen den Operator match (~) verwenden. Wir suchen hier nach der Variablen für Ihre Eingabezeile. Wenn es übereinstimmt, drucken wir die in NR gespeicherte Zeilennummer und beenden.

Mit -v können Sie eine awk-Variable (search) im obigen Beispiel erstellen. Anschließend weisen Sie ihm Ihre bash Variable ($var) zu.

5
jaypal singh
grep -n -m 1 SEARCH_TERM FILE_PATH | grep -Po '^[0-9]+'

erläuterung:

 -Po = -P -o

-P benutze Perl Regex

-o nur passende Zeichenfolge drucken (nicht die ganze Zeile)

0
jiangdongzi

Versuchen Sie es mit Pipping.

grep -P 'SEARCH TERM' fileName.txt | wc -l

0
Joshua Trimm