sed 特殊字符命令 &

前面章节,我们已经学习了够多的 sed 单字符命令,嗯,准确的说是单字母命令。

其实,sed 还另外支持两个特殊字符命令 等号(=合并连接符(&

前面章节,我们已经学习了够多的 sed 单字符命令,嗯,准确的说是单字母命令。

其实,sed 还另外支持两个特殊字符命令 等号(=) 和 合并连接符(&)。

等号(=)命令我们在前一章节 sed 特殊字符命令 = 中学习啦。本章节我们来介绍另一个特殊字符 合并连接符(&)

& 命令

sed 特殊字符命令 &,怎么说呢?

从它的字面解释 合并连接符 来看,就是把多个文本串在一起。

当然了,它不是这么简单,要是这么简单就好了。

它会在模式匹配成功后,将匹配成功的行根据模式进行分割,这样就存在三个部分的内容:模式之前的内容模式匹配的内容模式之后的内容。然后新的输出中,先输出 模式之前的内容,再输出 要替换的语句,并把要替换的语句中的 & 换成 模式匹配的内容,最后输出 模式之后的内容

是不是有点复杂了?

我们举个例子,比如存在某行 我爱简单教程。将模式设置为 /爱,那么就会把行的内容分割成

  • 简单教程

是模式 /爱/ 之前的内容, 是模式 /爱/ 匹配的内容,简单教程 是模式 /爱/ 之后的内容。

假设我们的替换语句是 &你,。 那么输出结果就是

我爱你,简单教程

拼接的过程就是

  1. 先输出 模式之前的内容
  2. 再输出 要替换的语句,并把要替换的语句中的 & 换成 模式匹配的内容&你, 并用 替换 &,其实就是 爱你,
  3. 最后输出 模式之后的内容: 简单教程

如果你还不懂,那个,多多练习找规律吧。

我们先来看语法。

特殊字符命令 & 通常与替换命令 s 一起使用。 语法格式一般如下

s/pattern/repalce_content_contain_&/

例如要把包行 的行 3) 小李,25岁,斯坦福大学 替换为 3) 小李,男,25岁,斯坦福大学,那么命令如下

s/李/&,男/

范例:将包含 的行在 之后插入 ,男

将包含 的行在 之后插入 ,男

[www.twle.cn]$ sed 's/李/&,男/' data.txt

运行结果如下

1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
3) 小李,男,25岁,斯坦福大学
4) 小王,22岁,清华大学

哈哈,我突然找到一种新的解释 & 命令的方法。我们就举上面这个作为例子吧。

  1. sed 先找到匹配模式的行,在上面这个范例中是 3) 小李,25岁,斯坦福大学
  2. 然后找到匹配的模式的内容,在上面的范例中是
  3. 然后把匹配的模式的内容替换为新的字符串 &,男,那么替换的结果就是 3) 小&,男,25岁,斯坦福大学
  4. 最后把 & 替换为匹配的内容,就是 3) 小李,男,25岁,斯坦福大学

哈,是不是很简单啊。

范例2

因为接下来另一个范例的需要,这次我们改为查找数字,就是查找每行开头的那个表示行的数字,找到之后,就在数字前面添加 Line

有了前面范例的铺垫,这个范例的代码想必就很简单了

[www.twle.cn]$ sed 's/[[:digit:]]*/Line &/' data.txt

哦,对了,我们还没学模式中的正则,这个以后我们会学,现在,你只要知道 [[:digit:]] 用于查找单个数字即可

上面的 sed 命令,结果你应该已经猜出来了吧

Line 1) 小明,23岁,北京大学
Line 2) 小红,22岁,清华大学
Line 3) 小李,25岁,斯坦福大学
Line 4) 小王,22岁,清华大学

范例3

范例2 中我们查找了每行开头的数字,对,就是行号。如果我们想查找第二个数字,就是那个年龄要怎么做呢?

首先,我们看看,第二个数字,前面有一个逗号,后面有一个 字,因此正则表达式为

/,[[:digit]]岁/

如果我们想在数字前添加 年龄 两个字,那么替换正则表达式应该是

s/[[:digit]]岁/年龄 &/

完整命令如下

[www.twle.cn]$ sed 's/[[:digit:]]*岁/年龄 &/' data.txt

运行结果如下

1) 小明,年龄 23岁,北京大学
2) 小红,年龄 22岁,清华大学
3) 小李,年龄 25岁,斯坦福大学
4) 小王,年龄 22岁,清华大学
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.