正则表达式捕获文本
来源:互联网 发布:淘宝弹出淘口令 编辑:程序博客网 时间:2024/06/07 19:51
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 有用。
但象 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 0
- 正则表达式捕获文本
- python 使用正则表达式捕获文本内容并调整
- 正则表达式捕获分组
- 正则表达式--非捕获
- 正则表达式- 捕获组 非捕获组
- 正则表达式中的捕获和非捕获
- 正则表达式中的捕获和非捕获
- 正则表达式 捕获组理解
- java正则表达式捕获组
- JavaScript之正则表达式捕获
- 解惑正则表达式中的捕获
- 解惑正则表达式的捕获
- 解惑正则表达式中的捕获
- js 正则表达式捕获型
- 正则表达式分组捕获说明
- 正则表达式处理文本
- 正则表达式--处理文本
- 正则表达式中的捕获组和非捕获组
- c语言之坑--位运算
- Eclipse报错:the superclass "javax.servlet.http.HttpServlet" was not found on the java Build Path
- 位操作基础篇之位操作全面总结
- 安卓jni进阶
- IOS已解决 在构建版本上传后, 一直处于处理状态
- 正则表达式捕获文本
- C语言编程(练习2:数组和指针)
- 判断 Canmand 命令是否有效
- HttpURLConnection webview sessionId 连贯性
- 在Web开发方面Java和PHP的比较
- 大数加法的处理技巧
- ArcGIS中依据一列,然后在新建字段里自动连续编号
- ASDoc使用说明
- C# 摘录自MSDN。 DataGridView控件的所有属性!