我想用它sed
来修改gcc -MM
为 C/C++ 文件生成依赖图的输出。
输入看起来像:
ThreadCrash.o : ThreadCrash.cpp ThreadCrash.h hdr1.h \
../inc/hdr2.h ../inc/hdr3.h \
../inc/hdr4.h ../inc/hdr4.h
我需要让它看起来像:
ThreadCrash.o : \
ThreadCrash.cpp \
ThreadCrash.h \
hdr1.h \
../inc/hdr2.h \
../inc/hdr3.h \
../inc/hdr4.h \
../inc/hdr4.h
对于替代品的“查找”部分,我一直在尝试“重复”捕获组,例如(.*)*
但无法弄清楚如何形成替换字符串。
我与 sed 无关,因此awk
非常欢迎任何简单的方法,例如等。
谢谢!
在每个 UNIX 机器上的任何 shell 中使用任何 awk:
删除行首的空格,然后用空格-反斜杠-换行符序列替换任何空格,而不是冒号或反斜杠:
使用 GNU sed:
尽管看起来违反直觉,但实际上将依赖项缝合回单行(通过重新加入延续),然后通过匹配水平空格序列(带有可选冒号)再次将其分开可能是最简单的。
所以给定
然后
最后
如果您能首先弄清楚如何防止
gcc -MM
跨行拆分,您也许可以避免第一步。参考: