我需要将一些代码行插入到文件中。问题是,我想将它插入到某个函数调用之后以及其后面的分号之后。
我想通过 来实现这一点sed
,但我不知道为什么。
例子:
源代码片段:
10 printf("asdf");
11
12 myFunc()
13
14 ;
这里我想在myFunc()
调用后面插入代码片段,但是不能直接插入到第13行,而是插入到第15行。
插入后所需的代码:
10 printf("asdf");
11
12 myFunc()
13
14 ;
15 SNIPPET
我最好的尝试是这样的:
sed -e '13 i\SNIPPET'
这显然不会“等待”分号。
那么,有什么方法可以组合这些条件,以便我在行号 *** 之后的第一个分号后面插入代码片段吗?
答案1
怎么样:
sed '
/myFunc()/!b
:1
s/;/; SNIPPET/;t
n;b1'
或者对于第 13 行:
sed '
13!b
:1
s/;/; SNIPPET/;t
n;b1'
答案2
我不会使用sed
- 我认为它不是用于此目的的好工具,因为它具有固有的面向行的性质。
我建议:
#!/usr/bin/env perl
use strict;
use warnings;
while (<>) {
#print current line (because we insert _after)
print;
#extract the number. If you need to work on _actual_ line number, you need $.
my ($num) = m/^(\d+)/;
if ( $num > 13 and m/;/ ) {
#print snippet, bail out
print ++$num, " SNIPPET\n";
last;
}
}
#print rest of file
print <>;
注意 - 这会根据您的示例从内容中提取编号。我不太清楚你是否想要实际的行号 - 尽管sed -e '13 ..'
暗示你需要。
在这种情况下:
if ( $. > 13 and m/;/ ) {
print "SNIPPET\n";
last;
}