awk sed grep用特殊字符提取模式

时间:2018-03-22 18:58:03

标签: awk sed grep pattern-matching

我试图理解awk和sed中的开关和args

例如,要获取行中nonce旁边的数字,请从文件response.xml中获取

WWW-Authenticate: ServiceAuth realm="WinREST", nonce="1828HvF7EfPnRtzSs/h10Q=="

我通过另一位成员的建议使用

nonce=$(sed -nE 's/.*nonce="([^"]+)"/\1/p' response.xml)

在我尝试下面的行中获取单词idOperation旁边的数字:

idOper=$(sed -nE 's/.*idOperation="([^"]+)"/\1/p' zarph_response.xml)

行提取数字:

{"reqStatus":{"code":0,"message":"Success","success":true},"idOperation":"185-16-6"}

如何获得185-16-6?

如果要提取的数据没有"" 喜欢operStatus旁边的1?

{"reqStatus":{"code":0,"message":"Success","success":true},"operStatus":1,"amountReceived":0,"amountDismissed":0,"currency":"EUR"}

2 个答案:

答案 0 :(得分:0)

关注awk可能对您有帮助。

awk -F"\"" '/idOperation/{print $(NF-1)}'   Input_file

解决方案第二: sed以下内容可能对您有所帮助。

sed '/idOperation/s/\(.*:\)"\([^"]*\)\(.*\)/\2/'   Input_file

编辑: 如果您想获取字符串operStatus后面的数字,那么以下内容可能对您有帮助。

awk 'match($0,/operStatus[^,]*/){;print substr($0,RSTART+12,RLENGTH-12)}'  Input_file

答案 1 :(得分:0)

使用grep perl-style regexes

grep -oP "nonce=\"\K(.*)?(?=\")" Input_file
grep -oP "idOperation\":\"\K(.*)?(?=\")" Input_file

如果输入是json,你可以使用jq

jq .idOperation Input_file