(использую 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 является поисковой, она не будет включена в совпадение.