У меня есть файл, который начинается так
## CONFIG-PARAMS-START ##
##
## text1 text2 NNNNNNNNN (arbitrary_comment) ##
## text1 text2 NNNNNNNNN (arbitrary_comment) ##
## text1 text2 NNNNNNNNN (arbitrary_comment) ##
##
## CONFIG-PARAMS-END ##
<arbitrary rest of file>
Выход:
Я хотел бы проверить файл с помощью awk
, чтобы убедиться, что он начинается таким образом.
Если да, выведите только строки данных (не начало / конец, или "пустые" строки, или что-нибудь после этого раздела), и если нет, верните ненулевой rc [$?] или другое легко проверяемое условие, например [пустая строка].
Спецификация файла:
В современных (PRCE) выражениях регулярных выражений формат строк данных:
^##[[:space:]]* - starts with ## and optional spaces
([a-zA-Z0-9_-]+\.)+) - >=1 repetition of [text_string][dot] (no spaces)
[[:space:]]+ - spaces
([^[:space:]]+) - block of non-spaces
[[:space:]]+ - spaces
([0-9]+) - block of digits
[[:space:]] - spaces
\(.* - '(' + any text
##[[:space:]]*$ - 2 hashes, optional spaces + line end
(поэтому типичная строка может быть ## abc.3ef. w;4o8c-uy3tu!ae 9938 (good luck!)##
)
Не должно быть никаких других строк (включая пустые / пробельные строки) перед первой строкой или где-либо еще в блоке данных. В каждой строке последовательный пробел эффективно действует как один разделитель. Пробелы после первого ## и до + после последнего ## необязательны. Обычно в разделе будет <15 строк, поэтому размер / скорость / эффективность будут пренебрежимо малы.
(Жадный захват на 2-й последней строке не является проблемой, он будет минимально возвращаться, чтобы соответствовать '##' в последней строке)
Совместимость:
Широкая совместимость важна, так как в конечном итоге код должен будет работать на стандартных / стандартных сборках различных Linux, FreeBSD + других BSD, возможно, даже других современных * nix-платформ. (Это часть патча для широко используемого пакета с открытым исходным кодом). Возможно, базовый POSIX будет предоставлять поле уровня, а не только какой-то конкретный вариант awk
? Ремонтопригодность / простота понимания также полезна по той же причине. Надеюсь очень, чтобы избежать Perl ;-)
Я не совсем освоил использование awk для такого рода прямых и обратных ссылок и проверок и, тем более, идеи об управлении совместимостью / незначительных различиях в реализациях.
Навыки Awk приветствуются, чтобы получить рабочую версию этого фрагмента!