簡體   English   中英

在bash中使用SED打印RegEx匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM