Извлечь / вырезать строки совпадающих строк - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь извлечь / вырезать некоторую часть из начала совпадающих строк в моем файле.Удалите все перед совпадением строк [SUCCESS] и [FAILURE].содержимое аналогично приведенному ниже

[1] 10:32:54 [SUCCESS] host123
hyujhbjbhjbjk cbcjd
yuiiiik,,................
[2] 10:32:54 [FAILURE] host123
jbjk cbcjd
yuiiiik,,................
[3] 10:32:54 [SUCCESS] host12356
jhbjbhjbjk cbcjd
yuiiiik,,................

Need expected as below output. with one space/blank line

[SUCCESS] host123
hyujhbjbhjbjk cbcjd
yuiiiik,,................

[FAILURE] host123
jbjk cbcjd
yuiiiik,,................

[SUCCESS] host12356
jhbjbhjbjk cbcjd
yuiiiik,,................

Я пытаюсь выполнить команду ниже sed, но не помогаю

sed -n 's/^.*[SUCCESS]/[SUCCESS]/p'
sed -n 's/^.*[FAILURE]/[FAILURE]/p'

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Я думаю, вы должны:

  • экранируйте [ в вашем поисковом шаблоне
  • прекратите использование флага -n и положитесь на автоматическую печать

Если вы не возражаете против пустой пустой строки, я бы использовал следующее, которое использует группу захвата и обратную ссылку:

sed -E 's/.*(\[SUCCESS\]|\[FAILURE\])/\n\1/' file

или

sed -E 's/.*\[(SUCCESS|FAILURE)\]/\n[\1]/' file

Вы можете попробовать здесь .

0 голосов
/ 30 апреля 2019

Мне кажется, что вы пытаетесь удалить часть файлов [n] <date>, которую можно выразить с помощью следующего регулярного выражения:

grep -o "\[[0-9]\] [0-9][0-9]\:[0-9][0-9]\:[0-9][0-9] " *

Как видите, используя grep -o, вы можете показать только эту часть линии.
Используя grep -v, вы можете исключить строку, содержащую это выражение.

Я надеялся, что grep -ov объединит оба в показе целых строк, удалив выражение, но, похоже, это не так.

Может кто-нибудь дать последний толчок и соответственно отредактировать мой ответ?

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