正则表达式捕获文本

unix 操作文本的工具集内大多是以“行”为操作单位的,例如 grep,sort 等等。另外有一些工具如 cut 等可以将“行”中部分内容提取出来,这种操作通常叫做“捕获”。

但象 cut 这样的命令因为不支持正则表达式,只能完成很简单的捕获工作。因此能满足 LZ 需要的工具主要有 sed, awk, perl 等。其它支持正则表达式功能的脚本工具如 python 等也可以做到,但或多或少对系统环境本身有一定的要求(例如是否安装了 python 等等)。

sed 功能专一故执行速度最快,但它的正则表达式的表达能力最弱,写复杂表达式时很罗嗦。

awk 号称“万能过滤器”,正则表达式的表达能力很强。是专门用来执行过滤和捕获工作的好工具。但它相对独立,和系统的交互能力不强,因此只适合拿来处理文本。

perl 是泛用型脚本工具,LW 设计 perl 之初的目的就是拿它来替代 awk 及各类 shell 脚本工具,因此功能非常强大,相比之下正则表达式处理能力最强(应该算目前最强大的正则表达式处理工具了),但由于其书写过于灵活多变,掌握它不太容易,如果仅用来做捕获工作有点大材小用。

所以我建议 LZ 拿 awk 来解决问题。命令行:

awk -f 脚本文件名.awk 数据文件名

脚本文件名.awk 中的内容:

# 脚本开始
{
# $0 表示当前行
# match() 执行完毕后,捕获的内容由 RSTART, RLENGTH 指出
# substr 抽出 $0 中的捕获的内容,并由 print 打印
  if (match($0, /正则表达式/))
    print substr($0, RSTART, RLENGTH);
}
# 脚本结束

上述脚本内容也可直接写在命令行上:

awk '{if(match$0,/正则表达式/))print substr($0, RSTART, RLENGTH);}' 数据文件名

当然也可以采用管道方式

cat 数据文件名 | awk '{if(match$0,/正则表达式/))print substr($0, RSTART, RLENGTH);}'

希望对 LZ 有用。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值