转义字符Escape character在正则中的用法

通过()的在基本正则和扩展正则中的不同使用,详细介绍了转义字符的使用注意事项

转义字符Escape character在正则中的用法

Linux中的转义字符通常用 \ 标识开始,转义意味着 \ 后面的字符有特殊的意义,通常是一个控制动作,比如在echo命令中echo -e  \a表示警告,一般情况下能听到一声蜂鸣。

在正则中,也有同样的转义需求,下面把常用的也是容易混淆的几个字符一一说明用法。在引入正文之前,请先看这个题目:

用基本和扩展正则找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行:

基本正则表示:grep “^\([[:alpha:]]\|_\).*()” functions

扩展正则表示:egrep  “^([[:alpha:]]|_).*\(\)” /etc/rc.d/init.d/functions

从中可以看到小扩号()在基本正则中没有转义,而在扩展正则中用到了转义\(\),原因是在基本正则的定义中,\(\)是分组的表达,所以()就表示是扩号的原义,而在扩展正则中,分组是用()来表示,所以()的原义需要\(\)来进行转义。

对于点号 . 来说,无论在基本还是扩展正则中,都是匹配任意单个字符的特殊意义,所以如果正则表达式中需要点号 . 本来的意义如文件的后缀.txt, .sh时,就需要用 \ 转义,也可以用[.]来表示。

此外,在使用vim或sed对输出或文件进行查找替换操作时,如果用到的分割符号是 / , 查找或替换的内容包包含有 / 时,需要做转义。例子:

需要把一个文件中所有的/etc替换为/conf,如果用s///,转义如下:

        sed ‘s/\/etc/\/conf/’ file1

可以用更直观的方法来避免转义 / ,如更改为其它分割符@@@或###,这时 / 不需要再转义:

        sed ‘s@/etc@/conf@’ file1 或sed ‘s#/etc#/conf#’,但是这种情况下,如果查找替换的字符包括分割符@ #,同样也需要用 \ 来分别进行转义。

总之,转义字符的使用比较灵活,总的原则是在语法结构中定义有特殊作用的字符,如果想引用字符本身,都需要用 \ 转义。

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95854

(10)
Evan LiangEvan Liang
上一篇 2018-04-13
下一篇 2018-04-13

相关推荐

  • 第八周作业

    1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
    2、描述awk命令用法及示例(至少3例)
    3、描述awk函数示例(至少3例)

    Linux笔记 2018-06-29
  • sed

    文本处理工具sed

    2018-05-02
  • 用户。组 ,文件的权限管理

    tr .grep 命令

    2018-04-02
  • route命令

    1.   使用背景         需要接入两个网络,一个是部署环境所在内网环境,这个环境是上不了外网, 外网环境很可能是一个无线网络。如果两者都连接上,很可能导致有一方不能起作用,即外网或内网上不了,常常需要使用繁琐的“禁用网络连接”、“启用网络连接”的操作来进行内外网的切换,甚是麻烦。         为了解决这个问题,可以使用route命令来使得同时内…

    Linux笔记 2018-05-01
  • linux sed用法总结

    处理文本的工具sedStream EDitor, 行编辑器sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,…

    Linux笔记 2018-04-15
  • Tomcat介绍及相关实验(一)

    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

    2018-07-24