grep 'NM1[*]IL' temp.txt | awk -F'*' '{print $NF}' | sed 's/~$//'
Вы можете запустить части этого конвейера (вплоть до |
и не включая), чтобы увидеть, что конкретные команды делают с вашим вводом.
grep 'NM1[*]IL'
- отфильтруйте входные строки, чтобы остались только те, которые соответствуют этому шаблону.grep
принимает регулярное выражение в качестве аргумента, а *
- это специальный символ регулярного выражения (означающий 0 или более символов, за которым он следует), поэтому его необходимо экранировать.Я использовал класс символов здесь ([]
), потому что я думаю, что это аккуратно.Мог бы использовать NM1\*IL
для того же эффекта.
awk -F'*'
- -F
указывает разделитель полей , который я установил на *
.Awk разбивает каждую входную строку на поля , поэтому все, что находится между двумя *
s, является полем для awk.
'{print $NF}'
- это программа awk, которую он теперь будет выполнять на своем входе.Он говорит: «для всех входных строк выведите поле с номером NF
», где NF
- специальная переменная awk, оно означает «количество полей».Так что он печатает последнее поле.
sed 's/~$//'
- просто уберите конечный ~
.$
означает конец строки.Так что этот sed заменяет любые тильды, предшествующие EOL, пустой строкой.Могли бы написать tr -d '~'
, но этот sed более точен (только тильды перед EOL).
grep(1)
, awk(1p)
и sed(1)
- все стандартные утилиты командной строки UNIX.Изучите справочные страницы для получения дополнительной информации о том, как их использовать.