使用 grep 或类似工具搜索和提取

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

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

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
1个回答
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
后面的模式匹配匹配到部分虚拟行后,将虚拟行中未匹配的部分转换回多行;随后的模式匹配又回到了多行规则中。

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