Для чего используется bash-static?

Предположим, мы сформулируем требования следующим образом:

  • У нас есть файл параграфов, которые представляют собой области последовательных непустых строк, разделенных одной или несколькими пустыми строками.
  • Всякий раз, когда "pattern" встречается внутри абзаца, мы хотели бы, чтобы эта строка начинала новый абзац, за исключением случаев, когда "pattern" встречается в первой строке абзаца.

  • Кроме того, мы не против нормализовать файл так, чтобы между абзацами было ровно одна пустая строка, и никаких пустых строк в начале или конце.*

Если эти требования приемлемы, мы можем воспользоваться преимуществами режима абзацев Awk (включил пустое значение в RS):

awk 'BEGIN { RS=""; FS="\n" }
           { print sep $1;
             for (i = 2; i <= NF; i++)
             { if ($i ~ /pat/) print ""; print $i }
             sep=FS }'

В режиме абзацев записи являются абзацами. Поскольку мы используем \n в качестве FS, поля $1, $2, ... $NF соответствуют строкам абзацев. Например, если NF равно 5, то мы имеем дело с пятистрочным абзацем. Разделяющие абзац новые строки удаляются, и каждая запись $0 содержит только внутренние новые строки между строками, и разделение полей производится по ним.

Абзац имеет по крайней мере одну строку, потому что абзацы не могут быть пустыми: пустой абзац выглядит как две последовательные новые строки, которые являются частью одной и той же последовательности разделения абзацев.

Поэтому, не проверяя, что NF не меньше 1, мы просто печатаем первую строку параграфа с помощью print sep $1. В первый раз sep пуст, поэтому не имеет значения; но после первого абзаца мы устанавливаем sep на новую строку, так что следующий print sep $1 создаст разделение абзацев.

После печати первой строки мы перебираем оставшиеся строки, если они есть, и печатаем их. Здесь мы проверяем, соответствует ли каждая строка шаблону. Если да, то перед печатью выводим дополнительную пустую строку.

15
21.08.2017, 01:15
1 ответ

Возможно, вы имеете в виду пакет .deb. bash-static, который является статически связанной версией bash, что означает, что это автономная программа, которая не зависит ни от чего другого (особенно от библиотек) на вашем диске.

Я использовал его в двух разных случаях:

  • Устанавливал на серверы, чтобы у меня всегда был работающий bash, даже в катастрофических ситуациях, когда ld.soили libcне работают (отсутствуют, повреждены, плохо сконфигурированы, ...)
  • Предоставляется клиентам вместе с моими собственными сценариями оболочки, так что я уверен, что у них есть правильная версия bash, поскольку я использовал некоторые расширенные функции, представленные в bash v4.3.
27
27.01.2020, 19:49

Теги

Похожие вопросы