1

У меня есть файл, который начинается так

## 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 приветствуются, чтобы получить рабочую версию этого фрагмента!

0