【发布时间】:2014-03-13 22:31:02
【问题描述】:
我要插入文字
#include < abc/malloc.h>
毕竟在一个C文件中
#include
行,就在最后一次出现 #include 之后。
【问题讨论】:
-
您真的希望这是最后一个
#include还是尖括号中的最后一个? (假设#include与角括号和引号的混合实现)?
我要插入文字
#include < abc/malloc.h>
毕竟在一个C文件中
#include
行,就在最后一次出现 #include 之后。
【问题讨论】:
#include 还是尖括号中的最后一个? (假设 #include 与角括号和引号的混合实现)?
使用awk:
awk '
FNR==NR && /^#include/ { line=NR; next }
FNR!=NR
FNR==line { print "#include <abc/malloc.h>" }
' code.c code.c
如你所见:
awk阅读code.c两次FNR==NR
【讨论】:
awk 不会修改原始文件。您应该将标准输出重定向到一个新文件,然后重命名它以覆盖原始文件
输入:
$ cat in.h
#include <foo.h>
#include <bar.h>
/* No more includes */
/* But more stuff */
找到最后一个#include 行:
$ l=$(grep -n '^#include' in.h | tail -1 | cut -d: -f1)
在此行之后添加一行:
$ sed "$l a#include <baz.h>" < in.h
#include <foo.h>
#include <bar.h>
#include <baz.h>
/* No more includes */
/* But more stuff */
【讨论】:
$(grep '^#include' in.h | wc -l) 而不是$(grep -n '^#include' in.h | tail -1 | cut -d: -f1)
假设你可以在包含之间有任何东西。
awk '
BEGIN {
x = 0
}
{
if ($0 ~ /^#include/)
x = NR
b[NR]=$0
}
END {
for (i = 1; i <= x; ++i)
print b[i]
print "#include <abc/malloc.h>"
for (i = ++x; i <= NR; ++i)
print b[i]
}
' file.c
【讨论】:
你可以试试这个,
tac yourfile.c | sed '/#include/{ s/#include.*/#include<someheader>\n&/; :loop;n; t loop;}'| tac > updated_yourfile.c
【讨论】: