我有一堆包含XML标签的文件,例如:
<h> PIDAT <h> O
我需要删除<h>
该行第一行之后的所有内容,因此可以得到以下信息:
<h>
为此,我正在使用
sed -i -e 's/(^<.*?>).+/$1/' *.conll
但似乎sed无法识别$1
。(据我了解,$1
应删除组中未包含的所有内容)。有没有办法可以做到这一点?如果您能指出正确的方向,我将不胜感激。
PS:我在正则表达式应用程序上测试了这些表达式,它们可以工作,但不能从命令行运行。
sed
有向引用的形式\1
,\2
等等$1
是类似Perl的更多。另外,如果使用基本正则表达式(BRE),则需要转义(...)
形成?
and和的括号+
。或者,您可以在-E
选项中使用扩展的正则表达式。
请注意,sed正则表达式是贪婪的,因此<.*>
将<h> PIDAT <h>
在该行中匹配,而不是在first处停止>
。并且.*?
没有任何意义(.*
已经可以匹配任何内容,因此?
不需要通过via使其成为可选对象)。
这可能起作用:
sed -i -Ee 's/^(<[^>]*>).*/\1/' *.conll
[^>]
匹配除以外的所有内容>
,因此<[^>]*>
匹配<h>
但不匹配<h> PIDAT <h>
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句