在Unix和Mac上的Shell编程(正则表达式)

三个文章是连住同一个小姐姐。

首先我们回忆一下部分的正则表达式

  1. 星号(*)指定匹配的零个活多个字符

  2. 问号(?)可以指定任意单个字符

  3. [...]指定包含在中括号中的任意字符

  4. 点号(.)能够匹配任意单个字符,不论是什么字符

接下来我用ed来演示大量的正则表达式。

共8124个字符

其实,我的测试文档不好,很多的字符串没有,匹配不出来。能演示到什么情况听天由命。

p为打印命令,范围限定为1,$打印整个文件。

/ ... /                                查找由空格包围的3个字符

The Unix operating system was pioneered by Ken        /         Repeat last search        Thompson and Dennis Ritchie at Bell Laboratories

1,$s/p.o/XXX/g                       将所有的p.o修改成XXX

1,$p                                   查看修改结果

The Unix operating system was XXXneered by Ken ThomXXXn and Dennis Ritchie at Bell Laboratories in the late 1960s. One of the primary goals in the design of the Unix system was to create an environment that XXXmoted efficient XXXgram development.

在第一次搜索中,ed从文件起始部分开始查找,在第一行中发现字符序列was符合指定的模式并将其打印出来。

重复上一次的搜索(ed命令/)使得文件的第二行被显示出来,因为and与指定模式匹配。接下来的替换命令s将符合下列模式的字符系列替换成XXX:字符p,接着是任意单个字符,然后是字符o。前缀1,$指明在全文范围内应用替换操作,替换操作的格式为s/old/new/g,其中s表明是替换操作,斜线用来界定被替换内容和替换内容,g表明执行全局替换,而不仅仅是替换某一行。

匹配行首:脱字符(^)

如果脱字符^作为正则表达式的第一个字符,它可以匹配行首位置。因此,下列正则表达式

^George

只能够匹配出现在行首的George。在正则表达式中,这因此称为“左根部”(left-rooting)。

来看下面的例子:

/the/

>>in the late 1960s. One of the primary goals in >>the design of the Unix system was to create an

/^the/                                 查找以the开头的行

the design of the Unix system was to create an

1,$s/^/>>/                            在每一行的行首插入>>

1,$p

        >>The Unix operating system was pioneered by Ken >>Thompson and Dennis Ritchie at Bell Laboratories >>in the late 1960s. One of the primary goals in >>the design of the Unix system was to create an >>environment that promoted efficient program >>development.

上述例子中同样展示了如何使用正则表达式^匹配行首位置。其中利用其在每行的首部插入字符>>。

下列命令

1,$s/^/ /

也常用于在行首插入空格(在本例中插入了4个空格)。

匹配行尾:美元符号($)

如同^可以用来匹配行首,美元符号$可以匹配行尾。因此,正则表达式

contents$

能够匹配出现在行尾的字符序列contents。

那么你认为下列正则表达式能够匹配到什么?

.$

它能够匹配行尾的点号?不仅如此。别忘了点号可以匹配任意字符,因此这个正则表达式匹配的是行尾的任意字符(包括点号)。

那该如何匹配点号?一般而言,如果你想匹配任何对于正则表达式来说有特殊含义的字符,可以在该字符前加上一个反斜线(\)来去除其特殊含义。例如,下面的正则表达式

\.$

能够匹配以点号结尾的行。正则表达式

^\.

能匹配以点号开头的行。

想将反斜线作为普通字符?可以使用连续两个反斜线\\。

   /\.$/                               搜索以点号结尾的行
development.
1,$s/$/>>/ 将>>添加到每行的行尾  1,$p
The Unix operating system was pioneered by Ken>> Thompson and Dennis Ritchie at Bell Laboratories>> in the late 1960s. One of the primary goals in>> the design of the Unix system was to create an>> environment that promoted efficient program>> development.>>
1,$s/..$// 删除每行最后两个字符 1,$p
The Unix operating system was pioneered by Ken Thompson and Dennis Ritchie at Bell Laboratories in the late 1960s. One of the primary goals in the design of the Unix system was to create an environment that promoted efficient program development.

^和$的一种普遍用法是下面的正则表达式

^$

它能够匹配空行。注意,这个正则表达式和下面的正则表达式不同:

^ $

它匹配的是由单个空格组成的行。

我不行了,就写这么多今天。

(0)

相关推荐

  • 三、正则表达式

    目录 1.正则表达式 2.正则表达式的扩展 3.通配 1.正则表达式 元字符(Metacharacters) 定义 描述字符的字符,它用于对字符表达式的内容.转换及各种操作信息进行描述 作用 用来阐释 ...

  • 在Unix和Mac上的Shell编程(1)

    Shell这个语言吧,在很多大佬看来,他并不是一个适合新手来学习的语言,或者说它不适合入门,不管怎么说,它的历史和Unix的历史是一样长的.而且最近我是尝试着迁移到unix上的. 不管怎么说,都是值得 ...

  • 在Unix和Mac上的Shell编程(2)

    小姐姐整楼(已被授权) 文件名中的空格怎么破? cat my test documentcat后面有三个参数,这样子看不可以的,咋办? 解决方法: 使用"my test document&q ...

  • Mac上复制和粘贴的一些小技巧

    了解如何在MacBook Air,MacBook Pro,iMac或任何其他Mac型号上复制和粘贴,以及如何像Pro一样管理剪贴板的提示. 如何在Mac上复制和粘贴: Cmd + C复制 Cmd + ...

  • 如何在Mac上隐藏桌面图标

    很多时候,我将文件保存在桌面上,这样我可以更方便地找到它们.而且,如果我忘了及时清理它们,它们会堆积并弄乱整个屏幕. 幸运的是,我整理了一些易于使用的技巧来隐藏Mac上的桌面图标,以立即消除混乱.让我 ...

  • 如何在Mac上更改显示器的刷新率

    在macOS上修改显示器的刷新率 macOS具有内置选项来更改显示器的刷新率. 按照以下步骤修改Mac的刷新率: 单击Mac左上角的Apple徽标. 从Apple菜单中 选择"系统偏好设置& ...

  • 如何在Mac上升级RAM

    了解如何检查是否可以更换Mac的RAM,在哪里购买RAM以及如何升级Mac的RAM. 如果您的Mac感觉迟钝,则升级RAM是一个很好的调整.虽然将旧硬盘驱动器替换为现代SSD是最显著的硬件改进,但Ma ...

  • 如何使用Movavi Video Editor Plus在Mac上制作旁白配音视频

    Movavi Video Editor Plus mac是一款Mac平台上非常强大优秀的视频编辑软件,Movavi Video Editor for Mac提供的滤镜.过渡.片头还有标注等功能,让您可 ...

  • 教你如何在Mac上打开CAJ格式的文件

    今天有人问我「Mac 怎么打开 CAJ 格式文件啊?」 我的第一反应是: CAJ 是啥? 科普: CAJ是电子刊物的一种格式.可以使用CAJ全文浏览器来阅读. CAJ全文浏览器是中国期刊网的专用全文格 ...

  • 如何在Mac上管理辅助功能键盘的选项?

    如果您在Mac台式机或MacBook上使用键盘时遇到问题,则可以使用一些键盘辅助功能,这些功能可以使您的工作变得更容易管理.启用这些键盘辅助功能非常容易,并且会为需要它的人打开一个全新的世界.那我们如 ...