我偶然發現了一種我無法解釋的行為,希望你們中的一些人可以幫助我。
我嘗試從一個更大的專案中生成某種文檔Ant
,因此我用它sed
來過濾文件中的信息,以便稍後在文檔中使用。
我有一個普通的 ant 建置文件,其中包含如下行:
<target name="targetA" depends="targetD" description="some fancy description">
...
<target name="targetB" depends="targetD" description="some fancy description">
...
<target name="targetC" depends="targetD" description="some fancy description">
現在我沿著這條 sed 行運行:
sed -nr 's/.*?target name="(.*?)".*="(.*?)".*/ * \1 - \2/p'
它應該給我:
* targetA - some fancy description
* targetB - some fancy description
* targetC - some fancy description
相反,我得到:
* targetA" depends="targetD" - some fancy description
* targetA" depends="targetD" - some fancy description
* targetA" depends="targetD" - some fancy description
我嘗試跳過第二組的輸出,以驗證它是第一組實際上與整個“依賴”部分匹配的組,儘管我將正則表達式設置為非貪婪直到下一個雙引號。
我在這裡缺少什麼?
使用像這樣更明確的正規表示式可以按預期工作,但我仍然沒有得到貪婪的東西:
sed -nr 's/.*?target name="(.*?)".*=.*="(.*?)".*/ * \1 - \2/p'
因為這可能很有趣,我在 ubuntu linux 上使用 sed-4.2.2-4ubuntu1 (預設安裝)
答案1
嘗試這個:
sed -nr 's/.*target name="([^"]*)" .*="(.*)".*/ * \1 - \2/p' file
輸出:
* targetA - 一些奇特的描述 * targetB - 一些奇特的描述 * targetC - 一些奇特的描述