Regex 使用awk提取日志文件中两个字符串之间的数字
这是日志行的一个示例:Regex 使用awk提取日志文件中两个字符串之间的数字,regex,bash,awk,Regex,Bash,Awk,这是日志行的一个示例: 我想用PCRE(-p)查找在callee\u num:grep之后出现的号码: 使用GNUawk: awk 'match($0, /.* callee_num:<<\"(\+[0-9]+)\".*"/, a) {print a[1]}' file.txt awk'匹配($0,/.*callee_num:grep与PCRE(-p): 使用GNUawk: awk 'match($0, /.* callee_num:<<\"(\+[0-9]+)\".*
我想用PCRE(
-p
)查找在callee\u num:grep
之后出现的号码:
使用GNUawk
:
awk 'match($0, /.* callee_num:<<\"(\+[0-9]+)\".*"/, a) {print a[1]}' file.txt
awk'匹配($0,/.*callee_num:grep
与PCRE(-p
):
使用GNUawk
:
awk 'match($0, /.* callee_num:<<\"(\+[0-9]+)\".*"/, a) {print a[1]}' file.txt
awk'match($0,/.*callee_num:您可以使用sed执行此操作,默认情况下使用-n
禁用打印:
sed -n 's/.*callee_num:<<"\([+0-9]*\)">.*/\1/p' file
sed-n的/*callee_num:您可以使用sed执行此操作,默认情况下使用-n
禁用打印:
sed -n 's/.*callee_num:<<"\([+0-9]*\)">.*/\1/p' file
sed-n's/*callee_num:通过给出两个字段分隔符,用
分隔,您告诉awk
使用其中一个作为分隔符
因此,当awk
通过提供由
分隔的两个字段分隔符来查找被调用方的编号:时,您告诉awk
使用其中一个作为分隔符
因此,当awk
查找被调用方编号:中的任何一个时,另一个awk:
$ awk '$7 ~ /<<\"/ {gsub(/.*<<"|">>$/, "", $7); print $7}' file
+6182290000648
如果还有另一个awk:
$ awk '$7 ~ /<<\"/ {gsub(/.*<<"|">>$/, "", $7); print $7}' file
+6182290000648
如果awk'{split($0,a,“callee_num:”)}{gsub(/“/,”,a[3]),则打印[3]}文件名
+6182290000648
awk'{split($0,a,“callee_num:”)}{gsub(/“/,”,a[3]);打印[3]}文件名
+6182290000648
hey,因为在第一行我有callee\u num:@fedorqui-thx供你评论。我已经改变了我的问题。嘿,因为在第一行我有callee\u num:@fedorqui-thx供你评论。我已经改变了我的问题。你是说用awk
这是不可能的吗@heemayl@heemayi匹配不起作用。awk:在源代码行1
@MaryamPashmi您必须使用Solaris。在这种情况下,请使用此awk-->/usr/xpg4/bin/awk以获得正确的版本。好的。我有操作系统mac,顺便说一句,thx sed正在使用我的版本。您是说使用awk
不可能吗@heemayl@heemayi匹配不起作用。awk:在源代码第1行退出
@maryampasm必须使用Solaris。在这种情况下,请使用此awk-->/usr/xpg4/bin/awk以获得正确的版本。好的。我有操作系统mac,顺便说一句,thx sed正在使用我的版本。sed中只有一个问题,\1
?\1
是反向引用,它指搜索模式中括号内捕获的第一组。使用exprSession在您的sed
命令中,您还可以使用match
调用awk
,并说:awk'match($0,/callee_num:/,res){print res[1]}文件
@fedorqui是的,但我认为matches数组是GNU扩展。我试图只使用标准功能:)是的,第三个参数(捕获组的参数)是GNU扩展。sed中只有一个问题,什么是\1
?\1
是一个反向引用,它指的是搜索模式中括号内捕获的第一组。使用sed
命令中的表达式,您还可以使用match
调用awk
,并说:awk'match($0,/callee_num:/,res){print res[1]}文件
@fedorqui是的,但我认为matches数组是GNU扩展。我试图只使用标准功能:)是的,第三个参数(捕获组的参数)是一个GNU扩展。我不明白你为什么使用gsub
?sub
在第一次匹配后停止,gsub
没有。你必须从开头和结尾截断。在gsub()中有两个匹配项,由
分隔(逻辑OR)。我不明白你为什么要使用gsub
?sub
在第一次匹配后停止,gsub
没有。你必须从开头和结尾截断。其中有两个匹配项由
分隔(逻辑OR)。
sed -n 's/.*callee_num:<<"\([+0-9]*\)">.*/\1/p' file
awk 'sub(/.*callee_num:<<"/, "") && sub(/">.*/, "")' file
awk 'sub(/.*callee_num:<<"/, "") && sub(/">.*/, "") && /^[+0-9]+$/' file
$ awk -F '"' '{print $2}' /tmp/t
conxa3
$ awk -F '"' '{print $4}' /tmp/t
+6182290000648
$ awk '$7 ~ /<<\"/ {gsub(/.*<<"|">>$/, "", $7); print $7}' file
+6182290000648
callee_num:<<"+6182290000648">>
callee_num:+6182290000648
awk '{split( $0,a,"callee_num:<<|>>") } {gsub(/"/,"",a[3]);print a[3]}' filename
+6182290000648