2015-01-07 4 views
0

Я ищу, чтобы создать cronjob, который предупредит нас, если определенный каталог отправил определенное количество писем от сканирования файла журнала. Один вкладыш, я использую это:Bash исключает строку из строки, если строка соответствует определенному тексту

awk '$3 ~ /^cwd/{print $3}' /var/log/exim_mainlog | sort | uniq -c | sed "s|^ *||g" | sort -nr | head --lines 5 

прежде, чем я дальше, мне нужно, чтобы исключить некоторые места из вывода, например:

50992 cwd=/var/spool/exim 
21960 cwd=/home/USER1/public_html/wp-content/cache/object/000000/746 
2717 cwd=/etc/csf 
2063 cwd=/home/USER2 
1072 cwd=/ 

мне нужно исключить:

1072 cwd=/ 
2717 cwd=/etc/csf 
50992 cwd=/var/spool/exim 

Должен ли я добавить файл в txt-файл, а затем использовать SED или есть более простой способ?

+2

'... | grep -v 'thing_to_exclude'' –

+2

... в этом случае это может быть 'egrep -v' cwd = (/ $ |/etc/csf |/var/spool/exim) ''. –

+0

Кроме того, 'sed' на самом деле является редактором ** потока **, а не файловым редактором, - если вы используете его для редактирования файлов на диске, а не для потоков, вы предположительно используете нестандартные расширения, такие как' -i' ; POSIX-стандартный ** файл ** редактор 'ex', а не' sed'. –

ответ

2

трубы через grep -v исключить матчи:

egrep -v ' cwd=(/$|/etc/csf|/var/spool/exim)'