Как grep для алфавитов, за которыми следует пробел и знак препинания?

У меня есть строка, называемая

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

Теперь я просто хочу использовать grep для получения testingName качестве моего вывода.

Первое число может меняться в зависимости от количества цифр (другая строка может содержать 12 в качестве первого номера), поэтому я не могу использовать grep на основе числа. Итак, как я могу это решить?

Учитывая, что все данные будут одинаково отформатированы, grep – неправильный инструмент для этого. Это полезно, конечно, но использование этого – kludge – это не то, для чего был разработан grep , и намного лучший инструмент – awk .

Поскольку ваш разделитель всегда будет «пространством, тире, пространством», т. Е. Вы можете сделать это:

 $ awk -F' - ' '{print $2}' <filename> 

где <filename> – это имя файла с данными, которые вы ищете, и вы получите все строки из всего файла, обрезанные только на вторую запись. Если вам не нравится использовать трехсимвольный разделитель, вы можете сделать это:

 $ awk -F- '{print $2}' | tr -d ' ' 

который просто захватывает все от первого до второго, включая пробелы, и удаляет пробелы через tr . Конечно, если у вас есть пробелы в именах файлов, это вызовет проблемы, и вы захотите придерживаться первого примера.

Это использует два экземпляра grep , но это чистый grep :

 echo '10909101 - testingName - Log8767, File787 - 8:50PM ' | \ grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*' 

Вывод:

 testingName