从文件中过滤特定属性

时间:2015-09-08 10:29:40

标签: bash awk grep

我有一个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

3 个答案:

答案 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代码