[英]Print RegEx matches using SED in bash
我有一個XML文件,該文件由一行組成。
我想要做的是通過Putty從文件中提取“ finalNumber
”屬性值。 而不是必須使用記事本++下載副本和搜索。
我已經構建了一個我在在線工具上測試的正則表達式,並嘗試在sed
命令中使用它來復制grep功能 。 該命令運行但不返回任何內容。
正則表達式:
(?<=finalNumber=")(.*?)(?=")
sed
命令(不返回任何內容,預期28,請參閱文件提取):
sed -n '/(?<=finalNumber=")(.*?)(?=")/p' file.xml
文件提取:
...argo:finalizedDate="2012-02-09T00:00:00.000Z" argo:finalNumber="28" argo:revenueMonth=""...
我覺得我很接近(我可能是錯的),我是在正確的路線還是有更好的方法來實現輸出?
好老grep沒問題。
grep -E -o 'finalNumber="[0-9]+"' file.xml | grep -E -o '[0-9]+'
使用-E
表示擴展正則表達式, -o
表示只打印匹配部分。
雖然你已經選擇了一個答案,但這里有一種你可以用純sed做的方法:
sed -n 's/^.*finalNumber="\([[:digit:]]\+\)".*$/\1/p' <test
輸出:
28
這將通過匹配編號和打印替換整行(因為p將打印整行,因此您必須替換整行)
這可能適合你(GNU sed):
sed -r 's/.*finalNumber="([^"]*)".*/\1/' file
sed
不支持預見斷言。 不過Perl確實如此:
perl -ne 'print $1 if /(?<=finalNumber=")(.*?)(?=")/'
據我了解,這里沒有必要使用預見。 試試這個吧
sed -n '/finalNumber="[[:digit:]]\+"/p'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.