上次我们介绍了awk的用法,今天我接着了解sed的功能和用法。
Sed可按照脚本命令来处理和编辑文件,简化对文件的重复性操作。
命令格式
sed命令格式:sed [options] 'command' file(s);
sed脚本格式: sed [options] -f scriptfile file(s);
选项参数
-e :直接在命令行模式上进行sed动作编辑,此为默认选项;
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
-i :直接修改文件内容[慎用!修改源文件!];
-n :或--quiet或--silent,只打印模式匹配的行;
-r :支持扩展表达式;
-h或--help:显示帮助;
-V或--version:显示版本信息。
动作参数
a :新增, 在当前行下面插入文本;
c :取代, 把选定的文本改为新的文本!
d :删除, 删除指定的行;
i :插入, 在当前行上面插入文本;
p :打印, 亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行;
s :替换, 替换指定字符,搭配正则表达式;
g : 全文匹配;
案例
创建测试文件sed.txt, 如下:
$ cat sed.txt
Today is a good day, a sunny day, a wonderful day, a important day.
I am a boy, a good boy, a lovely boy.
I like reading, sports, and coding.
Enjoy coding.
1 查找
查找字符串'good'
匹配到的整行都会打印;
$ sed -n '/good/p' sed.txt
Today is a good day, a sunny day, a wonderful day, a important day.
I am a boy, a good boy, a lovely boy.
2 替换操作
1 使用替换参数s, 将文本中的 ’a‘ 替换成 ’b‘;
4 sed 's/a/b/' sed.txt
Todby is a good day, a sunny day, a wonderful day, a important day.
I bm a boy, a good boy, a lovely boy.
I like rebding, sports, and coding.
Enjoy coding.
在没有添加其他参数的情况下,我们注意到:
- 只有每一行的第一个匹配到的字符被替换了,其他没有;比如第一行,只有today被替换成了todby;
- 字符匹配,而不是单词匹配,所以today中的a被匹配到;
- 替换之后的文件全部输出,即便存在没有匹配到的行;
- 原文件没有被修改;
2 只输出发生替换的行(-n和p结合使用)
$ sed -n 's/a/b/p' sed.txt
Todby is a good day, a sunny day, a wonderful day, a important day.
I bm a boy, a good boy, a lovely boy.
I like rebding, sports, and coding.
3 全文替换(动作参数g)
文本中所有的a都被替换了,并不只是每行的第一个被替换;
$ sed -n 's/a/b/gp' sed.txt
Todby is b good dby, b sunny dby, b wonderful dby, b importbnt dby.
I bm b boy, b good boy, b lovely boy.
I like rebding, sports, bnd coding.
4 直接修改原文件(选项参数-i, 慎用)
$ sed -i 's/a/b/g' sed.txt
$ cat sed.txt
Todby is b good dby, b sunny dby, b wonderful dby, b importbnt dby.
I bm b boy, b good boy, b lovely boy.
I like rebding, sports, bnd coding.
Enjoy coding.
3 新增/删除操作
1 在第二行后天添加一行'that is true'
$ sed '2a that is true' sed.txt
Today is a good day, a sunny day, a wonderful day, a important day.
I am a boy, a good boy, a lovely boy.
that is true
I like reading, sports, and coding.
Enjoy coding.
2 删除第2~4行
结合nl命令和管道显示出行号;
$ nl sed.txt | sed '2,4d'
1 Today is a good day, a sunny day, a wonderful day, a important day.
标签:boy,good,coding,文本处理,sed,Linux,txt,day
From: https://www.cnblogs.com/bailiji/p/17627469.html