追加 操作是在一段文本后面紧贴着另一段文本。
例如在DDKK.COM 弟弟快看,程序员编程资料站 后面追加 DDKK.COM 弟弟快看,程序员编程资料站 那么 DDKK.COM 弟弟快看,程序员编程资料站 就会变成 DDKK.COM 弟弟快看,程序员编程资料站DDKK.COM 弟弟快看,程序员编程资料站。
sed 追加命令 a
sed程序也有 追加操作,它使用单字母 a 命令来实现。
单字母a 是 append 的缩写,后者是 附加/追加 的意思。
a命令把一段文本 追加 到 模式缓冲区 里的数据后面。
但这个追加 并不是简单的附加在后面,而是在 模式缓冲区 数据后面先追加 换行符 然后在追加数据。
比如模式缓冲区里原有数据为 DDKK.COM 弟弟快看,程序员编程资料站,如果要追加 DDKK.COM 弟弟快看,程序员编程资料站,那么追加操作之后,模式缓冲区里的文本会变成 DDKK.COM 弟弟快看,程序员编程资料站\nDDKK.COM 弟弟快看,程序员编程资料站。
从某些方面说,sed 的追加操作是在新行追加。
追加命令 a 语法格式
[address] a append_text
- address 是选填的,用于指定把数据追加到指定的行后面。如果不填则数据会追加到每一行。
- append_text 是要追加的文本。
范例1:指定行后面追加新行
范例开始前,我们先准备下数据,现在当前目录下创建一个文件 data.txt 内容如下
1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学
如果我们需要在第 4 行后面追加 7) 小陈,22岁,哈工大,可以使用下面的命令
[www.ddkk.com]$ sed '4 a 7) 小陈,22岁,哈工大' data.txt
命令运行结果如下
1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
7) 小陈,22岁,哈工大
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学
注意
苹果电脑自带的 sed 命令会报错: sed command a expects \ followed by text
解决办法请参考 苹果电脑 macOS sed command a expects \ followed by text 错误
上面这个命令中 4 表示行号,a 是追加命令,剩余的部分则是要追加的文本。
范例2: 文件末尾添加新行
如果需要再文件末尾添加新行,可以使用 **美元 $
** 表示行号。
例如下面的命令,在文件末尾追加 7) 小陈,22岁,哈工大
[www.ddkk.com]$ sed '$ a 7) 小陈,22岁,哈工大' data.txt
运行结果如下
1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学
7) 小陈,22岁,哈工大
范例3: 指定匹配模式后追加数据
除了可以使用 行号,我们还可以使用 模式 来寻址行。
下面的命令,在包含 小王 的行后面追加 7) 小陈,22岁,哈工大
[www.ddkk.com]$ sed '/小王/ a 7) 小陈,22岁,哈工大' data.txt
运行结果如下
1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
7) 小陈,22岁,哈工大
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学
范例4: 每行后面都追加
如果我们不指定行号,那么 sed 的 a 命令会在每行后面都追加数据
例如下面的命令,会在每行后面都追加 7) 小陈,22岁,哈工大
[www.ddkk.com]$ gsed 'a 7) 小陈,22岁,哈工大' data.txt
运行结果如下
1) 小明,23岁,北京大学
7) 小陈,22岁,哈工大
2) 小红,22岁,清华大学
7) 小陈,22岁,哈工大
3) 小李,25岁,斯坦福大学
7) 小陈,22岁,哈工大
4) 小王,22岁,清华大学
7) 小陈,22岁,哈工大
5) 小刚,27岁,北京大学
7) 小陈,22岁,哈工大
6) 小英,21岁,哈佛大学
7) 小陈,22岁,哈工大
习题
1、 你知道下面命令的运行结果是什么吗?;
gsed '/北京大学/ a 7) 小陈,22岁,哈工大' data.txt
2、 你知道要如何写命令才会输出下面的文本嘛?;
1) 小明,23岁,北京大学
7) 小陈,22岁,哈工大
2) 小红,22岁,清华大学
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学
7) 小陈,22岁,哈工大
6) 小英,21岁,哈佛大学
7) 小陈,22岁,哈工大