2017-10-27 1 views
-2

Ich verwende awk, um einen großen Text nach übereinstimmenden Zeichenfolgen zu suchen. Mein Ziel ist es, den übereinstimmenden String, die Zeilennummer und die passende Zeile zu drucken. Ich konnte den ersten Teil nicht erreichen (dh den passenden String drucken).Suche Text für übereinstimmende Zeichenfolgen zum Drucken von Zeile und übereinstimmende Zeichenfolge

Zur Zeit habe ich:

awk '/string1/string2/string3/{ print NR, $0 }' file_to_search.txt 

Dies erzeugt die Zeilennummer und passende Zeile, aber nicht der passende String.

Jede Hilfe wird geschätzt.

+1

'/ string1/string2/string3 /' ist keine gültige regex. Suchst du nach 'string1' oder' string2' oder 'string3'? – anubhava

Antwort

2

Ihre Frage ist nicht klar, aber es klingt wie das könnte das sein, was Sie wollen:

awk 'match($0,/regexp/){ print substr($0,RSTART,RLENGTH), NR, $0 }' file_to_search.txt 
0

Mit grep können Sie die Zeilennummer und der passende String oder die komplette Linie bekommen (ich weiß)

grep -wnoF "string1 
string2 
string3" infile 

Mit awk können Sie bekommen, was Sie suchen

awk ' 
function findmatch(s, i) { 
for (i=1;i<=NF;i++) 
    {if ($i == s) 
    {print "find string = "s,"on line number = "FNR,"Complete line = "$0}}; 
} 
s1{findmatch(s1)} 
s2{findmatch(s2)} 
s3{findmatch(s3)} 
' s1='string1' s2='string2' s3='string3' infile 
+0

Ihr 'grep' _command_, wie geschrieben, erzeugt nicht die gewünschte Ausgabe, dh ** übereinstimmende Zeichenfolge **, ** Zeilennummer ** und ** übereinstimmende Zeile **, nur ** Zeilennummer ** und ** passende Zeichenfolge **, die nicht einmal die richtige Reihenfolge ist. – user3439894

+0

Ja, wenn Sie meine Antwort lesen, sage ich das. –

+0

Sie vermissen den Punkt offensichtlich, weshalb Sie eine Lösung bereitstellen, die in keiner Weise die angeforderte Ausgabe bereitstellt! Der Grep-Teil Ihrer Antwort sollte nicht da sein. Auch IMO Ihr 'awk' Befehl ist unnötig ausführlich und komplexer als nötig, um die gewünschten Ergebnisse zu erhalten. Die andere Antwort ist simpler und kann genau das produzieren, wonach gefragt wurde. Obwohl es mit dem OP übereinstimmen muss, muss es als 'awk' ($ 0,/regexp | regexp | regexp /) {drucke substr ($ 0, RSTART, RLENGTH), NR, $ 0} 'file_to_search.txt' verwendet werden, aber es arbeitet und produziert die angegebene gewünschte Ausgabe. – user3439894

Verwandte Themen