例子:
This is {
the multiline
text file }
that wants
{ to be
changed
} anyway.
应成为:
This is
that wants
anyway.
我在论坛中找到了一些类似的 主题,但是它们似乎不适用于多行大括号。
如果可能的话,我更喜欢一些单行方法,例如基于grep,sed,awk等的解决方案。
编辑:解决方案似乎还可以,但是我注意到我的原始文件包括大括号嵌套。因此,我要提出一个新问题。谢谢大家:如何删除多行文本文件中嵌套大括号之间的所有文本?
$ sed ':again;$!N;$!b again; s/{[^}]*}//g' file
This is
that wants
anyway.
解释:
:again;$!N;$!b again;
这会将整个文件读入模式空间。
:again
是一个标签。N
在下一行中读取。如果这不是最后一行,则$!b again
分支返回again
标签。
s/{[^}]*}//g
这会删除括号中的所有表达式。
在Mac OSX上,尝试:
sed -e ':again' -e N -e '$!b again' -e 's/{[^}]*}//g' file
让我们将其作为带有大量嵌套括号的测试文件:
a{b{c}d}e
1{2
}3{
}
5
这是处理嵌套花括号的修改:
$ sed ':again;$!N;$!b again; :b; s/{[^{}]*}//g; t b' file2
ae
13
5
解释:
:again;$!N;$!b again
这与以前相同:它读取整个文件。
:b
这定义了一个标签b
。
s/{[^{}]*}//g
只要文本不包含内部大括号,这将删除大括号中的文本。
t b
如果上述替代命令导致更改,请跳回到label b
。以这种方式,替换命令将被重复执行,直到所有大括号组都被删除为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句