2016-06-07 84 views
1

我有幾行HTML文件看起來像這樣:刪除<a>標籤在othre標籤的日中間

<div class="thumb tright"> 
    <div class="thumbinner" style="width:302px;"> 
     <a href="https://example.com/en/File:Tools_my_settings.png" class="image"> 
      <img alt="" src="images_en/thumb/0/0a/tool_settings.png/9dd94c2d99eea9.png" width="300" height="110" class="thumbimage" srcset="/my/en/images_en/thumb/0/0a/my_settings.png/450px-my_settings.png 1.5x, /31/en/images_en/thumb/0/0a/my_settings.png/600px-my_settings.png 2x"/> 
     </a> 
     <div class="thumbcaption"> 
      <div class="magnify"> 
       <a href="https://example.com/en/File:Tools_my_settings.png" class="internal" title="Enlarge"></a> 
      </div> 
      Tool settings 
     </div> 
    </div> 
</div>Tools Features - So Far 

我需要刪除以下href和緊接着的.png 2x"/>文字對應的結束標記</a>元件。

<a href="https://example.com/en/File:**Tools_my_settings.png" class="image">...</a> 

末我需要的線看起來像這樣:

<div class="thumb tright"> 
    <div class="thumbinner" style="width:302px;"> 
     <img alt="" src="images_en/thumb/0/0a/tool_settings.png/9dd94c2d99eea9.png" width="300" height="110" class="thumbimage" srcset="/my/en/images_en/thumb/0/0a/my_settings.png/450px-my_settings.png 1.5x, /31/en/images_en/thumb/0/0a/my_settings.png/600px-my_settings.png 2x"/> 
     <div class="thumbcaption"> 
      <div class="magnify"> 
       <a href="https://example.com/en/File:Tools_my_settings.png" class="internal" title="Enlarge"></a> 
      </div> 
      Tool settings 
     </div> 
    </div> 
</div>Tools Features - So Far 

所有文件包含相同的百通:<a href="https://choopy.com/en/File: ... 這是我曾嘗試:

find /var/www/clients/client1/web2/web/lms_docs/ -type f -print0 | xargs -0 sed 's/<a\shref="https:\/\/choopy.com\/en\/File:([--:\[email protected]%&+~#=]*[a-z])\.png"\sclass="image">//g' 

但它沒有做任何事情,我不知道如何刪除相應的結束標記</a>

+0

你不想來代替'的https://choopy.com ......',不是嗎?但是你的代碼是爲此而設計的。你應該用'https://example.com ...'刪除鏈接,對嗎? –

+0

對不起,我修復了原來的帖子...... – James

+0

股票建議:不要嘗試使用像sed這樣的面向行的工具來處理XML。改爲使用'xmlstarlet'或'xsltproc'。 –

回答

0

這將刪除所有<a href>的一個imagehttps://...com和相應的</a>

find /var/www/clients/client1/web2/web/lms_docs/ -type f -print0 | xargs -0 sed '/<a href=\"https:\/\/.*\.com\/en\/File:.*\" class=\"image\">/,/<\/a>/{ /<a href=\"https:\/\/.*\.com\/en\/File:.*\" class=\"image\">/d; /<\/a>/d}' 

而這一次是針對特定領域,爲https://example.com

find /var/www/clients/client1/web2/web/lms_docs/ -type f -print0 | xargs -0 sed '/<a href=\"https:\/\/example\.com\/en\/File:.*\" class=\"image\">/,/<\/a>/{ /<a href=\"https:\/\/example\.com\/en\/File:.*\" class=\"image\">/d; /<\/a>/d}' 

這是這樣的:「匹配<a href ....與class圖像之間的所有行和相應的<\a>sed模式匹配:」/ /「) 然後再次匹配的塊做「{}」:匹配相同的模式並刪除它們「/ d」。

更多信息:section 4.24

+0

我認爲,大括號「{}」中的指令可以簡化,知道要刪除的行是匹配塊中的第一個和最後一個。 –