我有一个包含很多功能的文件,每个功能都像
=======
CREATE PROCEDURE [fName]
code...
code...
END
GO
=======
我想得到每个函数模式,我使用的表达式是
^(CREATE PROCEDURE).*(\r\n.*)+\r\nGO
结果是错误的。可以帮忙吧!谢谢你的回答
答案 0 :(得分:1)
使用sed:
sed -n '/CREATE PROCEDURE/,/^END$/{H};/^GO$/{s/.*//;x;p;}' input
答案 1 :(得分:0)
尝试更多类似的内容:
(?<=^|\n)(CREATE PROCEDURE [\s\S]+?)(?=\r\nGO|$)
这将匹配每个启动新行的CREATE PROCEDURE实例及其后面的文本,最多但不包括下一个GO指令或文件末尾,以先到者为准。
在[\s\S]+?
中,问号会使其成为非贪婪的匹配,这就是我们停在 next GO而不是 last GO的方式。 [\s\S]
相当于[.\n]
,即它匹配任何字符。
我假设是.NET风格的正则表达式,因为你没有指定。
答案 2 :(得分:0)
而不是使用“。”并且\ r \ n尝试使用[\ s \ S]它匹配任何空白或不是包含换行符的空格。
CREATE PROCEDURE[\s\S]*GO
这可能需要设置一些正则表达式标志