Приведенные выше предупреждения, здесь и здесь , но особенно здесь относительно попыток парсить XML-файлы с помощью регулярных выражений -приняты во внимание. В общем, текст XML может не ограничиваться одной строкой, но поскольку в этом случае вы ищете определенные отдельные слова и при условии, что они сами не разбиты на несколько строк, вы можете использовать простой скрипт awk который сохраняет «состояние». Если он видит следующее ожидаемое слово, он увеличивает значение state
. Если он находит все ожидаемые шаблоны в правильном порядке, он устанавливает переменную found
, код возврата которой мы затем основываем на:
#!/bin/sh
for f in *
do
awk '
/advanced_override\.begin/ { state=1; }
/PREFETCH/ && state == 1 { state=2; }
/advanced_override\.end/ && state == 2 { found=1; }
END {
if (found)
exit 0
else
exit 1
}
' "$f" && printf "Found in: %s\n" "$f"
done
Учитывая эти 3 примера входных файлов:
$ cat input1
junk
advanced_override.begin other text
other text
PREFETCH other text
other text
advanced_override.end
$ cat input2
just some stuff
advanced_override.end
$ cat input3
junk
advanced_override.begin other text other text PREFETCH other text other text advanced_override.end
junk
Пример запуска скрипта дает:
Found in: input1
Found in: input3