Eu gostaria de usar sed
para modificar a saída do gcc -MM
que gera um gráfico de dependência para arquivos C/C++.
A entrada se parece com:
ThreadCrash.o : ThreadCrash.cpp ThreadCrash.h hdr1.h \
../inc/hdr2.h ../inc/hdr3.h \
../inc/hdr4.h ../inc/hdr4.h
E eu preciso fazer com que pareça:
ThreadCrash.o : \
ThreadCrash.cpp \
ThreadCrash.h \
hdr1.h \
../inc/hdr2.h \
../inc/hdr3.h \
../inc/hdr4.h \
../inc/hdr4.h
Para a parte 'localizar' do substituto, tenho tentado "repetir" grupos de captura como, (.*)*
mas não consigo descobrir como formar a string de substituição.
Eu não estou preso ao sed, então qualquer abordagem simples, por exemplo awk
, etc, seria muito bem-vinda.
Obrigado!
Usando qualquer awk em qualquer shell em cada caixa UNIX:
Remova o espaço no início da linha e substitua qualquer espaço seguido por algo diferente de dois pontos ou barra invertida pela sequência espaço-barra invertida-nova linha-caracter:
Usando GNU sed:
Embora pareça contra-intuitivo, pode ser realmente mais simples costurar a dependência de volta em uma única linha (reunindo as continuações) e, em seguida, separá-la novamente combinando sequências de espaços em branco horizontais (com dois pontos opcionais).
Assim dado
então
e finalmente
Você pode evitar o primeiro passo, se puder descobrir como evitar
gcc -MM
a divisão entre as linhas em primeiro lugar.Referência: