Скажем, у меня есть это в качестве ввода:
..pattern1...this
..pattern1...1
..pattern1...2
...
Или же
..pattern1...0
..pattern2...0
..pattern1...1
..pattern2...1
..pattern2...2
..pattern1...this
...
Т.е. список строк, содержащий только два типа шаблонов (строк). Я пытаюсь получить первую строку pattern1
после последней строки pattern2
. Если нет pattern2
тогда первая строчка pattern1
. Пример вывода для обоих случаев:
..pattern1...this
Я могу выполнить любой из этих случаев отдельно sed
( как в этом ответе ), но мне не удалось получить команду, которая выполняла бы оба объявления одновременно.
Кто-нибудь может вмешаться и протянуть руку помощи? Благодаря!
awk '/pattern1/ && !line{line=$0} /pattern2/{line=""} END{print line}' file
pattern1
будет найдено, установите line
переменную на всю строку.line
уже будет установлено.)pattern2
найдено, сбросить line
переменную, чтобы учитывалась следующая ошибка pattern1
.И в ответе Эда Мортона уже упоминалось, как обрабатывать, если вам нужно точное совпадение строк или если вы хотите взять шаблон из переменной оболочки. Добавляю свой ответ только для того, чтобы предположить, что использования tac
можно избежать.
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения