正则表达式捕获文本
发布时间:2020-12-14 01:26:42 所属栏目:百科 来源:网络整理
导读:unix 操作文本的工具集内大多是以“行”为操作单位的,例如 grep,sort 等等。另外有一些工具如 cut 等可以将“行”中部分内容提取出来,这种操作通常叫做“捕获”。 但象 cut 这样的命令因为不支持正则表达式,只能完成很简单的捕获工作。因此能满足 LZ 需要
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,RLENGTH);}' 数据文件名 当然也可以采用管道方式 cat 数据文件名 | awk '{if(match$0,RLENGTH);}' 希望对 LZ 有用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |