Уважаемые коллеги ...
Я создаю файлы журналов из нескольких тысяч строк вида:
a
b
X
d
X
e
b
g
Y
a
Y
d
Например, я хотел бы, чтобы выходные данные моего сценария печатали все строкиЧЕРЕЗ последнее совпадение «^ X», а затем выведите только совпадения «^ Y».Требуемый выход выше:
a
b
X
d
X
Y
Y
«X» всегда будет появляться, но «Y» может не отображаться.В тех случаях, когда «Y» не появляется, я верю , что последний «X» будет в последней строке файла.
Это было довольно сложно сделать с помощью «sed»", хотя это то, что я пытался.Я использую «tac», чтобы изменить порядок строк, чтобы я мог удалить все, что не соответствует «^ Y», до совпадения FIRST с «^ X».Поскольку я не использую «-n», после первого совпадения с «^ X» отображаются все строки.Я просто снова использую «tac», чтобы перевернуть его и поместить в файл.
Этот кажется работающим ...
tac /path/to/logfile | \
sed -e '1,/^X/ { /^Y/!d }' | \
tac > /output/path/logfile.processed
Нет ...?
PS: "tac" общедоступен во всех Linux?