Wie sucht man nach Buchstaben, auf die ein Leerzeichen und ein Satzzeichen folgen?

Wie sucht man nach Buchstaben, auf die ein Leerzeichen und ein Satzzeichen folgen?

Ich habe eine Zeile namens

10909101 - testingName - Log8767, File787 - 8:50PM  

Jetzt möchte ich einfach grep verwenden, um testingNamemeine Ausgabe zu erhalten.

Die erste Zahl kann hinsichtlich der Anzahl der Ziffern variieren (eine andere Zeile kann 12sich 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, grepist dies das falsche Tool dafür. Es ist sicherlich verwendbar, aber seine Verwendung ist ein Provisorium - dafür wurde es nicht grepentwickelt 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

verwandte Informationen