Как пропустить закомментированный раздел (/ * .... * / когда мы ищем слово в файле, используя bash? - PullRequest
0 голосов
/ 03 апреля 2019

Как пропустить закомментированный раздел в файле, когда мы ищем определенную фразу.

Пример: я хочу найти kali.

object Host "linux" {
import "windows"
address = "linux"
groups = ["linux"]
}

/* -comment section starts
object Host "kali" {
import "linux"
address = "linux"
groups = [linux ]
}
*/  -  comment section ends

object Host "linux" {
import "linux"
address = "linux"
groups = ["windows" ]
}

Ожидаемый вывод «пустой» не приведет к «объекту Host» kali "{"

Ответы [ 3 ]

0 голосов
/ 03 апреля 2019

Другой подход, использующий awk вместо grep

awk -v pattern="kali" '/\/\*/{f=1;next}/\*\//{f=0;next}!f&&$0~pattern' inputfile

0 голосов
/ 05 апреля 2019
cpp -P file | grep kali 

может расширить некоторые вещи, которые вы не хотите, но, похоже, хорошо работает для OP. Дополнительный вопрос в комментарии: как показать имя файла Если вы хотите выполнить это для набора файлов и хотите узнать, в каком файле у вас есть незакомментированное попадание, вы можете сделать что-то вроде

for f in *; do
   tmpfile="/tmp/kali.${f}"
   cpp -P "${f}" > "${tmpfile}"
   grep -l kali "${tmpfile}" | sed 's#/tmp/kali.##'
   rm -r "${tmpfile}"
done

или без tmpfile

for f in *; do
   cpp -P "${f}" | grep -q kali && echo "${f}"
done
0 голосов
/ 03 апреля 2019

Вместо использования регулярных выражений вы должны использовать API icinga2 через CLI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...