前端之家收集整理的这篇文章主要介绍了
正则表达式捕获文本,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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 有用。