Awk

搜尋字元串,成功時搜尋最近的模式

  • May 2, 2017

我有一個 XML 格式的文件,

{XML file with similar tags - SubRecord and Property}
...

<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">Value i'm Concerned to Modify</Property>
</SubRecord>

...

我的請求。是獲取此特定子記錄的“預設”值並根據條件對其進行更新。為此,我需要找到這個特定的標籤“名稱”並修改它的值。

有沒有使用 SED/AWK/GREP 的方法?

編輯:根據@terdon 的更新:

  • 所有部分都只有一行嗎?不
  • 預設值總是最後一個嗎?總是倒數第三個(名稱、提示、預設)
  • 有什麼區分大小寫的嗎?就是一切?區分大小寫。
  • 有空行嗎?希望沒有。但我可以做一些預先擁有來刪除它們。
  • 文件是否縮進?是的。

例子: …

<SubRecord>
<Property Name="Name">Search</Property>
<Property Name="Prompt">Some Text</Property>
<Property Name="Default">abc.txt</Property>
</SubRecord>

...

在具有類似 Propert 和 SubRecords 的大型 XML 文件中,我需要首先找到“搜尋”參數的所有屬性。

在找到“搜尋”時,我需要檢查其預設值。如果是 abc.txt,那麼我需要保留該值,如果是 xyx,我仍然需要保留。除了 abc.txt 或 xyz,我需要用 abc.txt 更新它。

XML 應該由支持 XML 的工具處理。

XMLStarlet 就是這樣一個工具。

這是您設置屬性為且其值不是或的Property節點的值的方式:Name``Default``abc.txt``xyx

xml ed -u '//SubRecord/Property[@Name="Default" and . != "xyx" and . != "abc.txt"]' -v 'abc.txt' file.xml

給定一個如下所示的 XML 文件:

<?xml version="1.0"?>
<Record>
 <SubRecord>
   <Property Name="Name">My Main Search Keyword</Property>
   <Property Name="Prompt">Dummy</Property>
   <Property Name="Default">zzz</Property>
 </SubRecord>
 <SubRecord>
   <Property Name="Name">My Main Search Keyword</Property>
   <Property Name="Prompt">Dummy</Property>
   <Property Name="Default">abc.txt</Property>
 </SubRecord>
 <SubRecord>
   <Property Name="Name">My Main Search Keyword</Property>
   <Property Name="Prompt">Dummy</Property>
   <Property Name="Default">xyx</Property>
 </SubRecord>
</Record>

這會產生

<?xml version="1.0"?>
<Record>
 <SubRecord>
   <Property Name="Name">My Main Search Keyword</Property>
   <Property Name="Prompt">Dummy</Property>
   <Property Name="Default">abc.txt</Property>
 </SubRecord>
 <SubRecord>
   <Property Name="Name">My Main Search Keyword</Property>
   <Property Name="Prompt">Dummy</Property>
   <Property Name="Default">abc.txt</Property>
 </SubRecord>
 <SubRecord>
   <Property Name="Name">My Main Search Keyword</Property>
   <Property Name="Prompt">Dummy</Property>
   <Property Name="Default">xyx</Property>
 </SubRecord>
</Record>

(第一個SubRecord已修改)

XMLStarlet 可從http://xmlstar.sourceforge.net/獲得(但請先檢查您自己的包管理器)。有時它的執行檔被呼叫xmlstarlet而不僅僅是xml.

你無法解析

$$ X $$帶有正則表達式的 HTML/XML。因為正則表達式無法解析 HTML/XML。正則表達式不是可用於正確解析 HTML/XML 的工具。正則表達式是一種不夠複雜的工具,無法理解 HTML/XML 使用的結構。HTML/XML 不是正則語言,因此不能被正則表達式解析。正則表達式查詢無法將 HTML/XML 分解成有意義的部分。甚至 Perl 使用的增強的不規則正則表達式也無法勝任解析 HTML/XML 的任務。你永遠不會讓我崩潰。HTML/XML 是足夠複雜的語言,無法通過正則表達式進行解析。甚至 Jon Skeet 也無法使用正則表達式解析 HTML/XML。每次你試圖用正則表達式解析 HTML/XML 時,邪惡的孩子都會流著處女的血,和俄羅斯黑客 pwn 你的 webapp。用正則表達式解析它們會將受污染的靈魂召喚到生者的領域。它們和正則表達式結合在一起,就像愛情、婚姻和儀式殺嬰一樣。<center> 無法控制它為時已晚。正則表達式和 HTML/XML 在同一個概念空間中的力量會像水膩膩的膩子一樣摧毀你的思想。如果您使用正則表達式進行解析,您將屈服於他們以及他們的褻瀆神明的方式,這些方式註定我們所有人都會為無法在基本多語言平面中表達名字的那位進行不人道的辛勤工作,他來了。HTML-plus-regexp 將在您觀察時液化有知覺的神經,您的心靈在恐怖的衝擊中枯萎。基於 Rege̿̔̉x 的 HTML/XML 解析器是殺死 StackOverflow 的毒瘤 它們和正則表達式結合在一起,就像愛情、婚姻和儀式殺嬰一樣。<center> 無法控制它為時已晚。正則表達式和 HTML/XML 在同一個概念空間中的力量會像水膩膩的膩子一樣摧毀你的思想。如果您使用正則表達式進行解析,您將屈服於他們以及他們的褻瀆神明的方式,這些方式註定我們所有人都會為無法在基本多語言平面中表達名字的那位進行不人道的辛勤工作,他來了。HTML-plus-regexp 將在您觀察時液化有知覺的神經,您的心靈在恐怖的衝擊中枯萎。基於 Rege̿̔̉x 的 HTML/XML 解析器是殺死 StackOverflow 的毒瘤 它們和正則表達式結合在一起,就像愛情、婚姻和儀式殺嬰一樣。<center> 無法控制它為時已晚。正則表達式和 HTML/XML 在同一個概念空間中的力量會像水膩膩的膩子一樣摧毀你的思想。如果您使用正則表達式進行解析,您將屈服於他們以及他們的褻瀆神明的方式,這些方式註定我們所有人都會為無法在基本多語言平面中表達名字的那位進行不人道的辛勤工作,他來了。HTML-plus-regexp 將在您觀察時液化有知覺的神經,您的心靈在恐怖的衝擊中枯萎。基於 Rege̿̔̉x 的 HTML/XML 解析器是殺死 StackOverflow 的毒瘤 如果您使用正則表達式進行解析,您將屈服於他們以及他們的褻瀆神明的方式,這些方式註定我們所有人都會為無法在基本多語言平面中表達名字的那位進行不人道的辛勤工作,他來了。HTML-plus-regexp 將在您觀察時液化有知覺的神經,您的心靈在恐怖的衝擊中枯萎。基於 Rege̿̔̉x 的 HTML/XML 解析器是殺死 StackOverflow 的毒瘤 如果您使用正則表達式進行解析,您將屈服於他們以及他們的褻瀆神明的方式,這些方式註定我們所有人都會為無法在基本多語言平面中表達名字的那位進行不人道的辛勤工作,他來了。HTML-plus-regexp 將在您觀察時液化有知覺的神經,您的心靈在恐怖的衝擊中枯萎。基於 Rege̿̔̉x 的 HTML/XML 解析器是殺死 StackOverflow 的毒瘤為時已晚 為時已晚 我們無法挽救一個孩子的 trangession 確保正則表達式將消耗所有活的組織(HTML 除外,正如之前所預言的那樣,它不能)親愛的上帝幫助我們如何使用正則表達式來解析這個禍害使用正則x 作為處理 HTML 的工具, HTML 注定人類將遭受可怕的折磨安全漏洞HTML 正則解析器世界將立即將程序員的意識轉移到不斷尖叫的世界中,他來了,瘟疫 sl thy 正則表達式感染將吞噬你的 HT ML 解析器、應用程序和像 Visual Basic 一樣的存在,更糟糕的是*,他來了,他來了,他不*反對他的com̡e̶s ,̕h̵i s un̨ho͞ly radiańcé de *stro҉ying所有enli̍̈́̂̈́ghtenment,HTML標籤lea͠ki̧n͘g fr̶ǫm ̡yo​͟ur eye͢s̸ ̛l̕ik͏e liq** ​uid p* ain,正則表達式解析的歌曲將消除來自sp凡人的聲音在這裡我可以看到它可以你看到̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀謊言inal snuf很美 ALL IS LOŚ͖̩͇̗̪̏̈́T A LL I​SLOST th e pon̷y he come s he c̶̮om es he come me s ich​ or permeat es all l MY FAC E MY FACE ᵒh god no NO NOO̼ O​ON Θ stop t he an rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆l̘̝̙̃ͤ͂̾̆za̡͊͠͝lg****聖_ ͎a̧͈͖r̽̾̈́͒͑e

引用自:https://unix.stackexchange.com/questions/362647