前面章节,我们已经学习了够多的 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岁,清华大学