我有一个input.txt文件有以下文字。我必须过滤""。
- <ci>
<id>a573f0d014c18a5811793aedb5aad3</id>
<viewName>Windows</viewName>
</ci>
- <ci>
<id>7ad9088802ef62d75a15c9d4799fe8</id>
<viewName>Network</viewName>
</ci>
- <ci>
<id>abbbeeb60c4074bbc8483f321e0b43</id>
<viewName>Unix</viewName>
</ci>
输出应该是这样的:
a573f0d014c18a5811793aedb5aad3
7ad9088802ef62d75a15c9d4799fe8
abbbeeb60c4074bbc8483f321e0b43
答案 0 :(得分:0)
使用gnu grep,你可以使用积极的前瞻和积极的外观:
$ grep -oP '(?<=<id>).*(?=</id>)' file
a573f0d014c18a5811793aedb5aad3
7ad9088802ef62d75a15c9d4799fe8
abbbeeb60c4074bbc8483f321e0b43
答案 1 :(得分:0)
基于数据模式的另一个grep
备选方案
grep -o '[a-f0-9]\{30\}'
答案 2 :(得分:0)
Perl解决方案:
perl -lane 'print $1 if /^\s*<id>(\S+)<\/id>/' file
/ regex /捕获&lt;之间的信息。 id&gt;和&lt; / id&gt;变量$ 1
使用以下命令行选项:
n
循环输入文件的每一行,将行放在$ _变量中,不要自动打印每一行
l
在处理之前删除换行符,然后将其添加回来
a
autosplit模式 - perl会自动将空格上的输入行拆分为@F数组
e
:执行perl代码