【发布时间】:2018-11-02 16:34:34
【问题描述】:
我有一个实用程序预先生成的配置文件。如何提取由'), 分隔且可能跨多行的参数字符串?
FILE1 可以看起来像这样 - PARM3 跨越多行:
OPERAND ID = 'XXXX',
....
PARM3 = ( 'VALUE3A',
....
'VALUE3n'),
PARM4 = ( 'VALUE4',
....
'VALUE4n'),
....
或FILE2 可以如下所示 - PARM3 不跨越多行:
OPERAND ID = 'XXXX',
....
PARM3 = ( 'VALUE3A'),
PARM4 = ( 'VALUE4',
....
'VALUE4n'),
....
对于FILE1,如果分隔符'), 在另一行,则提取很好:
sed -n "/.* PARM3 .*/,/')\,/p" FILE1
输出:
PARM3 = ( 'VALUE3A',
....
'VALUE3n'),
对于FILE2,如果分隔符'), 在同一行,则提取不起作用:
sed -n "/.* PARM3 .*/,/')\,/p" FILE2
输出:
PARM3 = ( 'VALUE3A'),
PARM4 = ( 'VALUE4',
....
'VALUE4n'),
我怎样才能修复这个 sed 语句,只使用 sed 来处理可能在也可能不在同一行的分隔符?
【问题讨论】:
-
将 PARM3 后的
.*更改为.*? -
@Matt.G Sed 不支持非贪婪匹配。
-
你可以在 sed 中使用分支。如果在同一行中找到
),如果不继续地址范围,则跳转。