Отобразить элемент из файла до предельного значения в файле? - PullRequest
0 голосов
/ 30 октября 2019

У меня много файлов, которые выглядят так:

2019-10-28-00-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-28-06-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-28-12-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-28-18-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-29-00-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-29-06-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-29-12-00;/dev/xxx;128.00;106.54;/var/x/x/xx
2019-10-29-18-00;/dev/xxx;128.00;21.46;/var/x/x/xxx
2019-10-30-00-00;/dev/xxx;128.00;21.46;/var/x/x/xxx

Я хотел бы отображать содержимое своих файлов до шаблона "2019-10-29-12-00"

Я попробовал:

sed -n '/2019-10-29-12-00/,/endif/p' file.txt

Но эта команда сделала наоборот.

Не знаю как ... У вас есть идеи?

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Используйте 1,/pattern/p для печати всего от начала до шаблона.

sed -n '1,/2019-10-29-12-00/p' file.txt

DEMO

1 голос
/ 31 октября 2019

Это может работать для вас (GNU sed):

sed '/2019-10-29-12-00/q' file

Это будет печатать каждую строку вплоть до 2019-10-29-12-00 или

sed '/2019-10-29-12-00/Q' file

Это будет печатать каждую строкудо, но не включая 2019-10-29-12-00

Редактировать: в соответствии с комментариями пользователя.

sed '/2019-10-29-12-00/{:a;n;//ba;Q}' file

Найдя строку, содержащую 019-10-29-12-00, распечатать ее и получить следующую строку и повторять до концафайла или строки, которые не содержат 019-10-29-12-00. :a - это имя начала цикла, команда n печатает текущую строку и извлекает следующую (или, если конец файла, завершает все команды sed), //ba использует последнее регулярное выражение, т.е. /2019-10-29-12-00/ и если true, переходит к следующему имени цикла, т.е. :a. Q завершает все команды sed, но не печатает текущую строку. {...} ограничивает команду sed предыдущим регулярным выражением.

...