基于匹配正则表达式的Awk脚本值提取
我正在尝试编写一个基于匹配正则表达式的Awk脚本值提取,awk,grep,Awk,Grep,我正在尝试编写一个awk脚本,在其中捕获一个API响应。响应如下所示 id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChan
awk
脚本,在其中捕获一个API响应。响应如下所示
id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}
在上面,我只想打印下面的profile:login
值
karry.t@john.com
我怎样才能打印这个。对于不同的用户,此响应可能有所不同。因此,我必须根据
profile.login
进行过滤,并将其打印到csv文件旁边。感谢您的帮助。您可以使用此命令(使用tr
和awk
):
样本:
AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | tr ' ' '\n' | awk -F: '/profile:login/{print $NF}'
karry.t@john.com
AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | awk -vRS=' ' '/profile:login/{sub(/.*:/, ""); print}'
karry.t@john.com
或者只使用awk
:
tr ' ' '\n' | awk -F: '/profile:login/{print $NF}'
awk -vRS=' ' '/profile:login/{sub(/.*:/, ""); print}'
样本:
AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | tr ' ' '\n' | awk -F: '/profile:login/{print $NF}'
karry.t@john.com
AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | awk -vRS=' ' '/profile:login/{sub(/.*:/, ""); print}'
karry.t@john.com
您可以使用此命令执行此操作(使用
tr
和awk
):
样本:
AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | tr ' ' '\n' | awk -F: '/profile:login/{print $NF}'
karry.t@john.com
AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | awk -vRS=' ' '/profile:login/{sub(/.*:/, ""); print}'
karry.t@john.com
或者只使用awk
:
tr ' ' '\n' | awk -F: '/profile:login/{print $NF}'
awk -vRS=' ' '/profile:login/{sub(/.*:/, ""); print}'
样本:
AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | tr ' ' '\n' | awk -F: '/profile:login/{print $NF}'
karry.t@john.com
AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:karry.t@john.com profile:login:karry.t@john.com profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | awk -vRS=' ' '/profile:login/{sub(/.*:/, ""); print}'
karry.t@john.com
awk
可以提取文件中所需的内容
$ awk '{match($0,/profile:login[^\ ]+/);print substr($0,RSTART+14,RLENGTH-14)}' file
karry.t@john.com
简要说明
:在match($0,/profile:login[^\]+/)
中找到与正则表达式匹配的模式,并将起点存储在$0
中,长度以RSTART
RLENGTH
:打印忽略先前不需要的模式的子字符串substr($0,RSTART+14,RLENGTH-14)}
awk
可以从文件中提取所需内容
$ awk '{match($0,/profile:login[^\ ]+/);print substr($0,RSTART+14,RLENGTH-14)}' file
karry.t@john.com
简要说明
:在match($0,/profile:login[^\]+/)
中找到与正则表达式匹配的模式,并将起点存储在$0
中,长度以RSTART
RLENGTH
:打印忽略先前不需要的模式的子字符串substr($0,RSTART+14,RLENGTH-14)}