У меня есть линия, которая называется
10909101 - testingName - Log8767, File787 - 8:50PM
Теперь я просто хочу использовать grep для получения testingName
выходных данных.
Первое число может варьироваться в зависимости от количества цифр (другая строка может иметь 12
себя в качестве первого числа), поэтому я не могу использовать grep на основе чисел. Так как мне решить эту проблему?
решение1
Учитывая, что все данные будут отформатированы одинаково, grep
не тот инструмент для этого. Он, конечно, пригоден для использования, но его использование — это ерунда — он не grep
для этого был разработан, и гораздо лучший инструмент — awk
.
Поскольку ваш разделитель всегда будет последовательностью «пробел, тире, пробел», то -
вы можете сделать это:
$ awk -F' - ' '{print $2}' <filename>
где <filename>
имя файла с данными, которые вы ищете, и вы получите все строки из всего файла, обрезанные до второй записи. Если вам не нравится использовать разделитель из трех символов, вы можете сделать так:
$ awk -F- '{print $2}' | tr -d ' '
который просто берет все от первого -
до второго, включая пробелы, и удаляет пробелы с помощью tr
. Конечно, если в именах файлов есть пробелы, это может вызвать проблемы, и вам следует придерживаться первого примера.
решение2
Это используетдвапримеры grep
, но этоявляетсячистый grep
:
echo '10909101 - testingName - Log8767, File787 - 8:50PM ' | \
grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*'
Выход:
testingName