awk内嵌正则提取字符串_正则表达式+awk,sed提取任意匹配
的内容并输出!
⼀直觉得要达到在shell中随意匹配、提取任何指定范围的字符串,是需要很深的功夫才能做到的。
(注意,只要匹配到的内容⽽不要同在⼀⾏的任何其他⽆关的内容)
以前时间过的,多是
grep -E -o(缺点是⼀次只能匹配输出⼀个模式或者分组,多个⾮连续的模式匹配则不⾏),
cut -d" " -f 2,
tr -s "\n" " ",
awk '{ $1 ~ /os_v/}' (缺点是很多时候你根本不知道哪个域的内容符合你的匹配模式)
这些都是想尽办法出输⼊流的规律才能采取相应的措施。
现在终于有了万能的瑞⼠军⼑!
awk使⽤match匹配并分组保存到数组中。多个不同的分组需要不同的数组来保存哦。
如果⼀⾏出现多个ip,你会发现始终只匹配到第⼀个哦,要⾃⼰想办法哦!
[Administrator@RobertNote@/g/WorkDocs/jianwenlog/20170719@14:55:43]
2727 $ awk '{match($0,/(ip"[^,]*,)/,a);print a[1]}' 3235_click_
正则表达式提取中文ip":"221.122.83.166",
ip":"221.122.83.166",
ip":"123.116.51.146",
sed匹配没有问题,但是默认会显⽰⼀⾏中所有内容,所以难的是你需要知道保存分组并且只显⽰你想要的分组。下⾯就是使⽤替换⼀整⾏为分组⼀来达到⽬的的。
[Administrator@RobertNote@/g/WorkDocs/jianwenlog/20170719@14:55:59]
2728 $ sed 's/.*\(ip"[^,]*,\).*/\1/' 3235_click_
ip":"221.122.83.166",
ip":"221.122.83.166",
ip":"123.116.51.146",
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论