Похоже, у вас уже есть время начала и время окончания, сохраненные в секундах с начала эпохи. Если это правда, вы сможете сделать:
duration=$(( $epochEnd - $epochStart ))
[ $duration -gt 3600 ] && echo "Duration: $duration"
$ 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
Просто объедините два поиска:
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
, чтобы внести изменения в файл.
если совпадают «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