Wie extrahiert man ein ganzes Wort, das Teilzeichenfolgen enthält?

7

Wenn ich eine Datei habe, die so aussieht:

example.png example.jpg example2.jpg example2.png example.swf
example2.swf example3.jpg example4.jpg example3.png example3.swf 

und ich möchte zum Beispiel die Wörter extrahieren, die swf enthalten, die Ausgabe würde ungefähr so ​​aussehen

example.swf 
example2.swf
example3.swf

Ich habe versucht grep -o "swf[^[:space:]]*", was nur ein paar druckt swf, und dann habe ich versucht grep -o '[^ ]*a\.swf[^ ]*', was nur sehr wenige Zeilen mit "swf" ausgibt. Weiß jemand was zu tun ist?

Anzeigename
quelle
3
Sie sind nah dran, denke ich - aber wollen Sie nicht grep -o '[^[:space:]]*swf'null oder mehr Nicht-Leerzeichen vor dem swfTeilstring?
Steeldriver
@steeldriver Warum hast du das nicht als Antwort geschrieben? Du hättest meine Gegenstimme erhalten.
Sparhawk

Antworten:

5

Du kannst tun:

grep -o '[^ ]*\.swf' file.txt
  • [^ ]* Entspricht null oder mehr Nicht-Leerzeichen

  • \.swf passt wörtlich .swf

Beispiel:

% grep -o '[^ ]*\.swf' file.txt
example.swf
example2.swf
example3.swf
heemayl
quelle
4

Erster Schritt

Ersetzen Sie Leerzeichen durch Linienenden mit sed

Zweiter Schritt

Filtern Sie die Ausgabe mit grep

Beispiel

sed -e s/\ /\\n/g file | grep .swf

ncomputer
quelle
1
simpel und einfach. guter Ansatz.
Ass