2017-12-18 2 views
1

Ausführen des folgenden Befehls grep -r "TESTPROGS/" /home/am/test.txt auf dieser Datei:Text-Verzeichnis entfernen filtern und lassen Sie nur

AMPROGS/ 
AMPROGS/TqaWhkhiCx8ymy8lIR2p.SH 
AMPROGS/iOryQxYtZwhkl0x7CcmW.SH 
AMPROGS/a14KbHWjbnWehzkmDWuv.SH 
TESTPROGS/ 
TESTPROGS/HRH7B76fogxwX6zEe7w8.SH 
TESTPROGS/m0np3yEbpplqk36wVJ1l 
TESTPROGS/t8ZCuJMgZO9accbjoDnp 

liefert folgendes Ergebnis:

TESTPROGS/ 
TESTPROGS/HRH7B76fogxwX6zEe7w8.SH 
TESTPROGS/m0np3yEbpplqk36wVJ1l 
TESTPROGS/t8ZCuJMgZO9accbjoDnp 

Wie würde ich jetzt TESTPROGS Streifen aus/komplett ich habe, so dies:

HRH7B76fogxwX6zEe7w8.SH 
m0np3yEbpplqk36wVJ1l 
t8ZCuJMgZO9accbjoDnp 
+0

Ein anderer Weg, in 'Awk' zusammen mit den Antworten unten -' awk ‚/ TESTPROGS \ // {gsub (/ TESTPROGS \ //, ""); wenn (NF) drucke} 'Datei' – Inian

Antwort

4

wuith GNU grep:

grep -Po 'TESTPROGS/\K.*' /home/am/test.txt 

Ausgang:

 
HRH7B76fogxwX6zEe7w8.SH 
m0np3yEbpplqk36wVJ1l 
t8ZCuJMgZO9accbjoDnp 

\K: verwirft das bereits Teil

5

Verwendung awk:

awk -F'/' '$1=="TESTPROGS" && $2 != "" {print $2}' /home/am/test.txt 

-F/ spaltet die Linien der Eingabe in / durch getrennte Felder. $1=="TESTPROGS" prüft, ob das erste Feld gleich TESTPROGS ist. Wenn das wahr ist und das zweite Feld nicht leer ist, druckt es das zweite Feld.

1

Eine andere Möglichkeit, passend zu:

for line in $(grep -r "TESTPROGS/" /home/am/test.txt); do basename "${line}"; done 
3
awk '/TESTPROGS\/.+/' file 

TESTPROGS/HRH7B76fogxwX6zEe7w8.SH 
TESTPROGS/m0np3yEbpplqk36wVJ1l 
TESTPROGS/t8ZCuJMgZO9accbjoDnp 

oder

awk -F'/' '/TESTPROGS\/.+/{print $2}' filterout.awk 

HRH7B76fogxwX6zEe7w8.SH 
m0np3yEbpplqk36wVJ1l 
t8ZCuJMgZO9accbjoDnp 
Verwandte Themen