2016-04-20 1 views
0

Ich versuche, ein Grep zu einem Text patern (usr1234) für ein Verzeichnis zu drucken. Das Beste, was ich bisher tun konnte, ist den Dateinamen und die Zeile zu speichern, in der das Wort gefunden wurde. usr1234 kann 3 Ziffern oder 4: usr123 oder usr1234Ubuntu Grep, die ein Wort Muster zeigen und zu Variable zuweisen

Dies ist mein aktueller grep:

usrcode=$(grep -oPnr 'usr[0-9][0-9][0-9][0-9]' filename) 

und das Ergebnis ist:

filename/filelocation/file:7:usr1234 filename/filelocation2/file2:8:usr1234 filename/filelocation3/file3:7:usr1234 

alles was ich brauche ist usr1234 zu speichern (oder usr123 je nach Fall)

+0

so wollen Sie nicht den Namen der Datei, die gedruckt werden? Hast du es mit [grep -h] versucht (http://stackoverflow.com/a/19406829/1983854)? – fedorqui

+0

grep -h druckt nichts –

+0

grep -ohnr 'usr [0-9] [0-9] [0-9] [0-9]'/customers/$ 1 ist näher. es druckt: 7: usr1234 7: usr1234 8: 1234 8: usr1234 9: usr1234 9: usr1234 –

Antwort

0

Rohr es tun sed:

sed 's/\(.*\)\(usr[0-9]*\)/\2/' 

So:

usrcode=$(grep -oPnr 'usr[0-9][0-9][0-9][0-9]' filename | sed 's/\(.*\)\(usr[0-9]*\)/\2/') 
+0

Schließen, aber es druckt usr1234 usr1234 usr1234 usr1234 usr1234 –

+0

Es funktioniert für mich mit Ihrem Beispiel. Sie können es immer zum ersten Satz mit awk: awk '{print $ 1}' wie: usrcode = $ (grep-oPnr 'usr [0-9] [0-9] [0-9] [0 -9] 'Dateiname | sed' s/\ (. * \) \ (Usr [0-9] * \)/\ 2/') | awk '{print $ 1}' – Filip

1

Die Glücklichen:

usrcode=$(grep -ohr 'usr[0-9][0-9][0-9][0-9]' filename | head -1)