sed не получает все значения для второго параметра - PullRequest
1 голос
/ 14 сентября 2009

Я пытаюсь запустить команду для извлечения диапазона дат из файла и печати их

ex: sed -ne '/ ^ 2009-08-20 /, / ^ 2009-08-26 / p'

Тем не менее, у меня есть несколько событий 2009-08-26 в файле, я хочу, чтобы все они вернулись, но он возвращает только первое. Можно ли вернуть ВСЕ?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 14 сентября 2009

sed -ne '/ ^ 2009-08-20 /, / ^ 2009-08-26 / b e; / ^ 2009-08-26 / b e; d;: e p'

Объяснить: «e» - это метка, и если вы находитесь в диапазоне, вы переходите на эту метку. Вы даете второй шанс, и вы проверяете, является ли это концом диапазона. Если нет, удалите строку.

2 голосов
/ 14 сентября 2009

Причина, по которой он возвращает только первое совпадение с датой окончания, заключается в том, что диапазон варьируется от первого совпадения первого шаблона до первого совпадения второго шаблона (включительно) и затем прекратит печать до появления первого шаблона. снова. Если у вас нет проблем с написанием второго паттерна три раза, вы можете использовать

sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p'

, которая будет печатать строку, если она находится между датой начала (включительно) и датой окончания (исключая) - вот что! или если он начинается с даты окончания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...