Как запретить bash преобразовывать аргументы?

Следующий сценарий sed должен это делать:

s/\(#include\) *\([^ ]\+\)/\1 \2/

/^#include "/ {
    s/".*\//"/
    s/"\(.\)/"\l\1/g
    s/\([^A-Z]\)\([A-Z]\)/\1_\l\2/g
    s/_\+/_/g
}

Это можно применить к файлам, запустив:

sed -i.bak -f fix.sed input...

(Предполагается, что приведенный выше сценарий называется fix.sed , а любой { Впоследствии в качестве аргументов можно указать количество файлов {1}}. Удалите .bak , если вы не хотите создавать резервные копии.)

Первое выражение замены sed соответствует #include с последующим , возможно, пустым пробелом ( \ * ), и заменяет этот пробег одним пробелом . Он также переводит остальную часть строки ( [^] \ + ) в нижний регистр (используя \ l ).

Следующие четыре выражения sed, все из которых применяются только к строкам, которые начинаются с #include ", делают следующее:

  1. Удаляют имя пути (все, включая последняя косая черта);

  2. переводит первый символ между кавычками в нижний регистр;

  3. в начале каждого ряда заглавных букв вставляет подчеркивание и переводит первый символ бега в нижний регистр;

  4. сжатие пробежки подчеркивания, возможно, вставленные на предыдущих шагах.

Это несовершенно, но переводит ваш образец ввода должным образом.

1
16.01.2016, 00:55
0 ответов

Теги

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