2016-06-30 22 views
0

ISo finden Sie Dateien mit Text begann mit

find ./ -type f -name '*.php' -exec grep -slE '^asdasd' {} \; 

und

find ./ -type f -name '*.php' -exec pcregrep -l '^asdasd' {} \; 

Aber diese Befehle gefundenen Dateien zu verwenden versucht, wo 'asdasd' in Anfang der Zeilen, nicht aller Texte, zum Beispiel:

Dateiinhalt:

qweqwe 

asdasd 

czczc 

Ich möchte mit diesem Dateiinhalt nur Dateien finden:

asdasd 

qwdq 

qwdad 

(asdasd in Anfang aller Text)

Antwort

0

Mit awk können Sie überprüfen, ob die erste Zeile passt was sagen:

awk 'NR==1 && /pattern/' file 

Wenn Sie den Dateinamen drucken möchten, dann sagen:

awk 'NR==1 && /pattern/ {print FILENAME}' 

es zu verbinden mit find und prüfen, ob die erste Zeile beginnt mit „asdasd“, zu verwenden:

find -type f -exec awk 'NR==1 && /^asdasd/ {print FILENAME}' {} \; 
+0

Ja, es funktioniert , Danke vielmals! – user2371331

+0

@ user2371331 nett! Da Sie neu hier sind, vergessen Sie bitte nicht, die Antwort zu akzeptieren, wenn Ihr Problem bereits gelöst ist. Sie können es tun, indem Sie auf das Häkchen neben der Antwort klicken, um es von leer auf grün umzuschalten. Siehe [Hilfe-Center> Fragen] (http://stackoverflow.com/helpcenter/someone-answers), wenn Sie Fragen haben! – fedorqui

+0

Ok! Ich werde das machen. Noch etwas anderes: Wissen Sie, warum es mit pcregrep unmöglich ist? Es scheint, dass pcregrep und grep nur im Multiline-Modus arbeiten. Oder sie ignorieren '^' – user2371331

0

^(asdasd|qwdq|qwdad) zu regexp Teil nur ODER ^(asdasd|qwdq|qwdad).* zu regexp volle Linie finden wollen