提取 SET var = func(x, y, z);来自代码,可能带有换行符

问题描述 投票:0回答:2

我必须递归搜索一个单词,然后选择一行或多行,直到)。 我的文件如下所示,输出如下所述。

SET var1 = FormatValue(A1,B1,B2); 
SET var2 = FormatValue(X1, 
X2, 
X3); 
DEFINE VAR3; 
SET var4 = FormatValue(z1,z2,
z3);

我想搜索包含“set”的所有行,直到右括号“)”我希望输出为

SET var1 = FormatValue(A1,B1,B2); 
SET var2 = FormatValue(X1, X2, X3); 
SET var4 = FormatValue(z1,z2, z3); 
awk sed grep
2个回答
0
投票

使用TXR

$ txr set.txr data
SET var1 = FormatValue(A1,B1,B2);
SET var2 = FormatValue(X1,  X2,  X3);
SET var4 = FormatValue(z1,z2, z3);

set.txr
中的代码:

@(repeat)
@  (freeform " ")
SET @var = @fun(@args);
@  (do (put-line `SET @var = @fun(@args);`))
@(end)

通常,TXR Pattern 语言面向多行文本。

freeform
指令改变了纪律。接下来的模式匹配与输入的更改版本进行匹配,其中行被折叠成一根巨大的行。可选字符串参数指定行终止序列,默认为
\n
(换行符)。

freeform
后面的模式匹配匹配到部分虚拟行后,将虚拟行中未匹配的部分转换回多行;随后的模式匹配又回到了多行规则中。


0
投票

使用 GNU awk:

awk '{gsub("\n","")}$1=="SET"' RS='; *' ORS=';\n' file

gsub
删除记录中以分号
;
分隔的所有换行符(由
RS
设置)。

仅打印以

SET
开头的记录。

© www.soinside.com 2019 - 2024. All rights reserved.