这是我之前的延伸question。在这个问题中,我需要检索括号之间的文本,其中所有文本都在一行上。现在我有这样一个案例:
(aop)
(abc
d)
这次,左括号可以在一行上,右括号可以在另一行上,因此:
(abc
d)
也算作分隔符 ' 之间的文本( )
' 我需要将其打印为
abc
d
编辑:
针对我的问题可能存在的混乱,让我澄清一下。基本上,我需要在可能跨越多行的分隔符之间打印文本。
例如我的文件中有这样的文本:
randomtext(1234
567) randomtext
randomtext(abc)randomtext
现在我希望 Sed 挑选出分隔符“(”和“)”之间的文本。所以输出将是:
1234
567
abc
请注意,左括号和右括号不在同一行,但它们仍然算作 1234 567 的分隔符,因此我需要打印文本的该部分。 (注意,我只想要第一对分隔符之间的文本)。
任何帮助,将不胜感激。
啊!另一个棘手的 sed 难题:)
我相信这段代码可以解决您的问题:
sed -n '/(/,/)/{:a; $!N; /)/!{$!ba}; s/.*(\([^)]*\)).*/\1/p}' file
OUTPUT
对于它产生的提供的输入:
1234
567
abc
解释:
-
-n
抑制常规 sed 输出
-
/(/,/)/
用于范围选择(
and )
-
:a
用于标记标签a
-
$!N
意味着将下一行输入追加到当前模式空间中
-
/)/!
表示执行某些操作,如果)
在当前模式空间中不匹配
-
/)/!${!ba}
意味着转到标签a
if )
在当前模式空间中不匹配
-
s/.*(\([^)]*\)).*/\1/
表示替换之间的内容(
and )
仅通过内容来去掉括号
-
\1
用于组 1 的反向参考,即之间的文本\(
and \)
-
p
用于打印替换的内容
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)