Ich habe eine Zeile namens
10909101 - testingName - Log8767, File787 - 8:50PM
Jetzt möchte ich einfach grep verwenden, um testingName
meine Ausgabe zu erhalten.
Die erste Zahl kann hinsichtlich der Anzahl der Ziffern variieren (eine andere Zeile kann 12
sich selbst als erste Zahl haben), daher kann ich kein zahlenbasiertes Grep verwenden. Wie löse ich das also?
Antwort1
Da alle Daten identisch formatiert werden, grep
ist dies das falsche Tool dafür. Es ist sicherlich verwendbar, aber seine Verwendung ist ein Provisorium - dafür wurde es nicht grep
entwickelt und ein viel besseres Tool ist awk
.
Da Ihr Trennzeichen immer eine Folge von „Leerzeichen, Bindestrich, Leerzeichen“ sein wird, also -
, können Sie Folgendes tun:
$ awk -F' - ' '{print $2}' <filename>
wobei <filename>
der Name der Datei mit den gesuchten Daten ist. Sie erhalten alle Zeilen der gesamten Datei, gekürzt auf den zweiten Eintrag. Wenn Sie kein dreistelliges Trennzeichen verwenden möchten, können Sie Folgendes tun:
$ awk -F- '{print $2}' | tr -d ' '
das einfach alles vom ersten -
bis zum zweiten greift, einschließlich der Leerzeichen, und entfernt die Leerzeichen über tr
. Wenn Ihre Dateinamen Leerzeichen enthalten, würde das natürlich zu Problemen führen, und Sie sollten beim ersten Beispiel bleiben.
Antwort2
Dies verwendetzweiFälle von grep
, aber esIstrein grep
:
echo '10909101 - testingName - Log8767, File787 - 8:50PM ' | \
grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*'
Ausgabe:
testingName