2013-06-20 55 views
1

我有一個目錄.txt作爲搜索和提取 程序的輸出生成的文件。 .txt文件採用以下格式。根據標籤中的關鍵字刪除線條

根據關鍵字Entrust,我試圖刪除下面的行,使用 sed作爲後處理步驟。

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

sed命令我在shell腳本運行的是以下:注意到,沒有線從.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

文本文件說:委託,你的sed命令查找委託 – John3136

+0

@simak是在Windows上創建的文本文件?你只是想刪除包含'Entrust'的行或者刪除包含該行的標籤? –

+0

我想刪除包含Entrust的行。謝謝! – BRZ

回答

1

據我瞭解你們從txt文件刪除。我建議sed -i。你應該在${file}.mod看到已刪除的行需要與你的命令

sed -i '/Entrust/d' $file 
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 

這是你可以發表評論不會被注意到/由腳本讀取的行的方式。

0
perl -lne 'print unless(/\bEntrust\b/)' your_file.txt > your_file.mod 
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'/> 

請注意,該表達式不處理包含分行符的標籤。

1

你可以試試:

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

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

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