我想删除对函数XYZ
的每次调用。问题是这个函数可能会扩展到多行。 E.g。
XYZ( "line 1",
"line 2",
"line 3" );
为简化起见,我假设);
仅出现在通话结束时。
我已经尝试sed 's/XYZ(.*);//'
但没有成功,但在sed
中,.
字符匹配任何字符,包括换行符。我可能会错过sed
中的新行。
谢谢
答案 0 :(得分:1)
您可以将地址范围用作
sed '/^XYZ/, /);$/ d' inputFile
/^XYZ/
起始地址
/);$/
结束地址
d
删除命令。从提供的地址范围中的模式空间中删除行
<强>测试强>
$ cat input
XYZ( "line 1",
"line 2",
"line 3" );
hello world
XYZ( "line 1",
"line 2",
"line 3" );
$ sed '/^XYZ/, /);$/ d' input
hello world
修改强>
处理函数在同一行中出现的情况
$ sed '/^XYZ.*);$/d; /^XYZ/, /);$/ d' input
<强>测试强>
$ cat input
XYZ( "line 1",
"line 2",
"line 3" );
helo
XYZ( "line 1", "line 2", "line 3" );
hello world
$ sed '/^XYZ.*);$/d; /^XYZ/, /);$/ d' input
helo
hello world
答案 1 :(得分:1)
perl -p0e 's!\bXYZ\(.*?\);!!gs' input
测试:
XYZ( "line 1",
"line 2",
"line 3" );
hello world
XYZ( "line 1",
"line 2",
"line 3" );
XYZ(aaaa); XYZ(aaaa); aaa(aaaa);
abcXYZ( aaaa );
XYZ(aaaa);
XYZabc(aa);
输出是:
hello world
aaa(aaaa);
abcXYZ( aaaa );
XYZabc(aa);