Mit Grep erhält man die Zeilennummer des ersten Auftretens der Zeichenkette in der Bash-Shell

9

Ich benutze Bash-Skript zu Testzwecken. Während meiner Tests muss ich die Zeilennummer des ersten Auftretens eines Strings in einer Datei finden. Ich habe "awk" und "grep" beide versucht, aber keiner von ihnen gibt den Wert zurück.

Awk Beispiel

%Vor%

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

verwenden

Grep Beispiel

%Vor%

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

    
user1651888 25.02.2014, 16:11
quelle

3 Antworten

8

Sie brauchen $ () für die Variablensubstitution in grep

%Vor%     
Raul Andres 25.02.2014 16:19
quelle
7
%Vor%

grep wechselt

-n = Zeilennummer einfügen

-m 1 = Übereinstimmung mit einem

sed-Optionen (Stream-Editor):

's/X/Y/' - Ersetzen Sie X durch Y

\([0-9]*\) - Regulärer Ausdruck zum Übereinstimmen mit Ziffern null oder mehrere Male aufgetreten, Escape-Klammern, der String, der mit Regex in Klammern übereinstimmt, ist das \ 1-Argument in Y (Ersetzungszeichenfolge)

\([0-9]*\).* - .* passt jedes Zeichen an, das null oder mehrere Male auftritt.

    
enterx 25.02.2014 16:40
quelle
5

Versuchen Sie etwas wie:

%Vor%

In awk , / / interpretiert awk Variable wörtlich. Sie müssen den Operator match ( ~ ) verwenden. Was wir hier machen, sucht nach der Variablen in Ihrer Eingabezeile. Wenn es übereinstimmt, drucken wir die in NR gespeicherte Zeilennummer und beenden es.

Mit

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

    
jaypal singh 25.02.2014 16:18
quelle

Tags und Links