23、sed 特殊字符命令 =

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

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

本章节我们先来介绍 等号(=) 。另一个特殊字符下一个章节我们再介绍。

等号(=)命令

等号(=)命令只用于输出 行号。可以输出 行号寻址模式寻址 中的行号。

等号(=)命令的语法格式如下

[/pattern/]= 
[address1[,address2]]=

如果一个 sed 命令中存在 =命令,那么在输出时,就会先输出行号,然后是换行符,最后才输出行的内容

范例1: 输出文件内容的同时输出行号

下面的命令会在输出内容的同时输出行号

[www.ddkk.com]$ sed '=' data.txt

运行结果如下

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

范例2: 输出区间行的同时输出行号

=命令还可以和区间寻址结合使用,用于在输出区间行的内容的同时输出行号。

例如下面的 sed 命令,在输出第二行到第三行的内容同时输出行号。不在该区间的行只会输出内容。

[www.ddkk.com]$ sed '2,3=' data.txt

运行结果如下

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

从输出结果中来看,第一行和第四行都没有输出行号,只有第二第三行输出了行号。

范例3: 输出匹配模式行的行号

=命令除了可以用在行寻址外,还可以用在模式寻址中。用于输出匹配模式的行的行号。

例如下面的命令,用于输出包含 李 的行并输出行号

[www.ddkk.com]$ sed '/李/ =' data.txt

运行结果如下

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

从输出结果中可以看到,只有包含了 李 的行才会输出行号

范例4: 下面的输出结果是什么?

你能猜到下面的输出结果是什么吗?

[www.ddkk.com]$ sed -n '$ =' data.txt

在你自己的电脑上运行下,如果没啥变数的话,输出结果应该是

4

4代表什么呢? 我们看看 data.txt 的内容

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

4代表最后一行的行号,也代表文件的总行数。

其实,仅仅输出数字 4 是因为我们使用了 -n 选项,如果不使用 -n 选项的话,输出结果就是

[www.ddkk.com]$ sed '$ =' data.txt

运行结果为

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