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_20170719_export.txt

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_20170719_export.txt

ip":"221.122.83.166",

ip":"221.122.83.166",

ip":"123.116.51.146",

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值