собираем содержимое из нескольких строк в один выход

Способ Perl. По сути это то же самое, что и MikeV's sed ответ:

perl -pe 's/.*(consectetuer.*elit).*./$1/' file

-p означает "вывести каждую строку после применения сценария, заданного с помощью -e". s/foo/bar/ - это оператор подстановки; он заменит foo на bar. Круглые скобки фиксируют шаблон и позволяют нам использовать его в замене. Первый захваченный шаблон - $1, второй $2 и так далее.

Итак, команда сопоставит все до consectetuer (.*consectetuer), затем все до elit (.*elit), а затем все остальное до конца строки (.*) и заменит это на захваченный шаблон.

2
26.06.2018, 01:29
1 ответ

Было бы более элегантно сделать все это в awk, но если вы хотите что-то быстрое и грязное, вы можете просто установить разделитель записей awkравным разделителю групп grep-, а затем напечатайте поля с разделителями пробелами -, которые вы хотите, в том порядке, в котором вы хотите:

grep -C1 XYZ file | awk -vRS='\n--' '{print $1, $NF, $3, $2}'
ABCD1 1234597890 12345 1234
DEFG2 0987654321 56789 5678
2
27.01.2020, 22:09

Теги

Похожие вопросы