Grep для фильтрации и отображения только начала строки

Grep для фильтрации и отображения только начала строки

(использую MacOSX и могу преобразовать это в скрипт perl). Я новичок в командах Linux/Unix, и мой поиск в Google не увенчался успехом.

Я создаю скрипт, чтобы ускорить поиск записей о чьем-либо обучении. Я делаю это, перечисляя записи об обучении человека в одной строке (возможно, есть лучший способ?). Когда я использую Grep для поиска определенного имени, должности, на которой проходил обучение, или даты, он показывает всю строку. Я хочу выполнить поиск grep для определенной строки и показать только начало строки, например: первые 2 слова (имя / фамилия.).

Файл Training.txt выглядит примерно так:

Айви, Шон Кассир 24.05.2016 Склад 02.12.2016 Служба поддержки 31.11.2016

Аллен, Адам Кассир 10.05.2016 Склад 13.12.2016

Мартинес, Джессика Кассир 20.05.2017 Кладовая 29.10.2016 Супервайзер 23.01.2016

Команда, которую я сейчас использую, следующая: grep "Cashier" Training.txt

который возвращает все 3 записи, все содержимое строк всех записей.

Я пробовал: grep -E -o ".{0,0}Cashier.{0,5}" Training.txt

который возвращает (в этом примере все 3 записи), но показывает ноль символов перед словом «Касса» и 5 после.

Cashier 5/10

Как мне включить grep (или, возможно, команду Perl) для поиска, скажем, "Supervisor" и показать только первые 2 слова (имена)? Вторично: есть ли идеи, которые могут упростить этот тип процесса? (Электронная таблица в этом случае просто бесполезна).

решение1

Это идеально подходит для awk:

awk '/Supervisor/ { print $1, $2 }' /path/to/inputfile

Вы даже можете ограничить поиск третьим полем, чтобы не получить ложного срабатывания для человека с именем «Руководитель Боб»:

awk '$3 ~ /Supervisor/ { print $1, $2 }' /path/to/inputfile

решение2

Вы можете использовать grepв Perlэтом режиме:

grep -oP '^(\S+,?\s+){2}(?=Cashier\s)'

Полученные результаты

Ivie, Shawn
Allen, Adam
Martinez, Jessica

Работающий

  • В режиме Perl grep ищет два поля (\S+) с начала строки.
  • И стоя в конце пробела 2-го поля, если мы можем увидеть Cashier, за которым следует пробел, мы нашли наше совпадение. Поскольку строка Cashier является поисковой, она не будет включена в совпадение.

Связанный контент