O seguinte script sed deve fazer isso:
s/\(#include\) *\([^ ]\+\)/ /
/^#include "/ {
s/".*\//"/
s/"\(.\)/"\l/g
s/\([^A-Z]\)\([A-Z]\)/_\l/g
s/_\+/_/g
}
Isso pode ser aplicado aos arquivos em execução:
sed -i.bak -f fix.sed input...
(Isso pressupõe que o script acima é chamado fix.sed
e qualquer
número de arquivos pode ser dado como argumentos depois. Remova .bak
se você não quiser que nenhum backup seja criado.
A primeira expressão de substituição de sed corresponde a #include
seguido por uma
possivelmente uma execução vazia de espaços ( \ *
) e substitui essa execução por
espaço único. Ele também transforma o restante da linha ( [^ ]\+
) em
minúsculas (usando \l
).
As próximas quatro expressões sed, todas as quais se aplicam apenas a linhas que
comece com #include "
, faça o seguinte:
-
Nome do caminho da faixa (tudo até e incluindo a última barra);
-
transforme o primeiro caractere entre aspas em minúsculas;
-
no início de cada execução de letras maiúsculas, insira sublinhado e transformar o primeiro caractere de executar em minúsculas;
-
execuções de squeeze de sublinhado possivelmente inseridas pelas etapas anteriores.
Isto é imperfeito, mas traduz o seu exemplo de entrada como pretendido.