Grep для соответствия шаблону, но исключить конкретную строку - PullRequest
0 голосов
/ 16 мая 2019

У меня есть файл, содержащий различные строки журнала, и я хочу grep для шаблона, но исключаю, когда message:com.mycompany.excluded, поэтому в основном должно быть возвращено следующее:

"The log found this message blah, message:com.blahblah"
"The log found this message blah2, message:com.blahblah2"
"The log found this message foobar, message:com.mycompany"
"The log found this message blah, message:com.mycompany.included"

, но не:

 "The log found this message blah, message:com.mycompany.excluded"

Я использую этот шаблон, но он не будет работать для исключения com.mycompany.excluded

grep "The log found this message.*message:.*" "mylogs.txt"

Ответы [ 2 ]

1 голос
/ 16 мая 2019
awk '/The log found this message.*message:/ && !/com.mycompany.excluded/' "mylogs.txt"

Существуют различные способы сделать его более надежным, но они, вероятно, не нужны (в зависимости от того, как выглядит остальная часть вашего файла журнала).

0 голосов
/ 16 мая 2019

То, что вы хотите здесь, это sed, а не grep:

sed -i .bak 's/^.*excluded//' mylogs.txt

(-i .bak создает резервную копию вашего исходного файла с расширением .bak; в результате вы получите mylogs.txt и mylogs.txt.bak, а mylogs.txt удалит ненужные строки.)

...