根据标签内的关键字删除行

时间:2013-06-20 03:14:31

标签: linux shell unix sed

我有一个目录.txt文件作为搜索和提取的输出生成 程序。 .txt文件采用以下格式。

根据关键字Entrust,我正在尝试删除以下行 sed作为后处理步骤。

<content>This document has been digitally signed with external signatures using Entrust PKI</content>

我在shell脚本中运行的sed命令如下:注意到没有从.txt文件中删除任何行。 sed可以根据代码中的内容进行搜索和删除吗?还有其他办法吗?

sed '/Entrust/d' $file > ${file}.mod;
  <block>
  <title>
This is the title
  </title>
  </block>
  <block>
  <content>
Content1
  </content>
  </block>
  <block>
  <title>
Title 2
  </title>
  <content>
some content 2
  </content>
  </block>
  <block>
  <title>
Title 3
  </title>
  <content>
some content 3
  </content>
  <content>
This document has been digitally signed with external signatures using Entrust PKI

  </content>
  <content>
some content4

  </content>
  <content>
This document has been digitally signed with external signatures using Entrust PKI
  </content>
 </block>

5 个答案:

答案 0 :(得分:1)

据我了解,您正试图从txt文件中删除。我会建议sed -i。您应该使用命令

${file}.mod中删除所需的行
sed -i '/Entrust/d' $file

答案 1 :(得分:1)

您可以尝试:

sed -n '/Entrust/!p' $file > ${file}.mod

sed '/Entrust/d' $file > ${file}.mod

awk '!/Entrust/' $file > ${file}.mod

答案 2 :(得分:0)

sed -i 's/<content>This document has been digitally signed with external signatures using Entrust PKI</content>/#<content>This document has been digitally signed with external signatures using Entrust PKI</content>/g' $filename 

这是您可以注释脚本不会注意/读取的行的方式。

答案 3 :(得分:0)

perl -lne 'print unless(/\bEntrust\b/)' your_file.txt > your_file.mod

答案 4 :(得分:0)

要搜索XML样式标记之外的文本,请使用以下命令;

sed '/^\([^<]*\(<[^<>]*>\)*\)*Entrust/d'

这是一个例子;

$ cat tmp.txt
some content 2.
some content with Entrust.
<tag type='Entrust'/>
<tag>Entrust</tag>
$ sed '/^\([^<]*\(<[^<>]*>\)*\)*Entrust/d' tmp.txt 
some content 2.
<tag type='Entrust'/>

请注意,此表达式不处理包含换行符的标记。