Car*_*nas 6 xml sed regular-expression
我有一堆包含 XML 标签的文件,例如:
<h> PIDAT <h> O
我需要删除<h>该行中第一个之后的所有内容,以便我可以得到:
<h>
为此,我正在使用
sed -i -e 's/(^<.*?>).+/$1/' *.conll
但似乎 sed 无法识别$1. (据我所知,$1应该删除组中未包含的所有内容)。有没有办法实现这一目标?如果您能指出我正确的方向,我将不胜感激。
PS:我在正则表达式应用程序上测试了这些表达式并且它们起作用了,但它在命令行中不起作用。
mur*_*uru 11
sed反向引用具有, 等形式\1,更像 Perl。此外,如果使用基本正则表达式 (BRE),您需要转义形成组的括号,以及和。或者,您可以使用带有选项的扩展正则表达式。\2$1(...)?+-E
请注意, sed 正则表达式是贪婪的,因此<.*>将<h> PIDAT <h>在该行中匹配,而不是在第一个>. 并且.*?没有意义(.*已经不能匹配任何东西,因此?不需要通过它成为可选)。
这可能有效:
sed -i -Ee 's/^(<[^>]*>).*/\1/' *.conll
Run Code Online (Sandbox Code Playgroud)
[^>]匹配除 之外的所有内容>,因此<[^>]*>将匹配<h>但不匹配<h> PIDAT <h>。