sed + удалить строки, содержащие строки, кроме строк с

Похоже, у вас уже есть время начала и время окончания, сохраненные в секундах с начала эпохи. Если это правда, вы сможете сделать:

duration=$(( $epochEnd - $epochStart ))
[ $duration -gt 3600 ] && echo "Duration: $duration"
1
23.01.2017, 21:11
3 ответа
$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in >data.out

Команда sed сначала отключает стандартную печать каждой строки ( -n ), а затем использует две команды редактирования ( -e ). Первый выводит любую строку, содержащую слово rocommunity , за которым следует 127.0.0.1 позже в строке. Вторая команда редактирования распечатает все строки, не содержащие rocommunity .

С данными в начале вашего вопроса:

$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in
rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink  linux76 parshedona
2
27.01.2020, 23:13

Просто объедините два поиска:

sed  '/rocommunity.*127\.0\.0\.1/p;/rocommunity/d' /path/to/input

/rocommunity.*127\.0\.0\.1/p - В строке, совпадающей с ] rocommunity , за которым следует соответствие для 127.0.0.1 , выведите строку

/ rocommunity / d - В строке с совпадением для rocommunity выполните not print

Все остальное будет напечатано.

Чтобы изменить файл файла после того, как вы убедились, что именно то, что вы хотите, выполняется, вы можете использовать sed --in-place , чтобы внести изменения в файл.

5
27.01.2020, 23:13

если совпадают «rocommunity» и «127.0.0.1», переходить до конца. и выводить строку.

sed -e '/rocommunity{/127\.0\.0\.1/b' -e 'd;}' file

Что с реализацией GNU sed , вы можете сократить до:

sed '/rocommunity/{/127\.0\.0\.1/b;d}' file
1
27.01.2020, 23:13

Теги

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