用于按行处理文本文件
https://www.runoob.com/linux/linux-comm-sed.html
https://www.jianshu.com/p/90fc7c663143
1. 基本语法
cat file|sed 'number operation'
参数说明:
-n / --quiet / --silent : 仅显示script处理后的结果,有些命令不适用本参数则会将原文本一起输出
2. 删除行
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed '2,4d' #删除第二到第四行
1------------------------------------------------1
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
对以上的删除操作,效果相同的写法还有:
cat kkk|sed 2,4d可以省略单引号
cat kkk|sed -e 2,4d用 -e 来指定操作
cat kkk|sed 2,4\d用反斜杠来隔离数字和操作
cat kkk|sed -e 2,4\d反斜杠和 -e 结合
cat kkk|sed -e '2,4d'单引号和 -e 结合
如果只想删除其中的一行,将 d 之前的数字改成想要删除的行号即可
删除某行到最后一行
cat kkk|sed '3,$d'
在 sed 操作中,用 $ 代表最后一行的行号
3. 增加行
3.1 在某行前新增一行
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed '5i llll' #在第五行前新增一行
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
4------------------------------------------------4
llll
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed 5i\llll #在第五行前新增一行
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
4------------------------------------------------4
llll
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed '3i pppp\
uuuuuu' #增加两行及以上内容
1------------------------------------------------1
2------------------------------------------------2
pppp
uuuuuu
3------------------------------------------------3
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
当增加两行及以上内容时,每行新增加的字符后要紧跟一个反斜杠,下一行要增加的内容要换行输入
3.2 在某行后新增一行
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed '3a pppppp' #在第三行后新增一行
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
pppppp
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed 3a\pppppp ‘’#在第三行后新增一行
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
pppppp
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed '3a pppp\
uuuuuu' #在第三行后增加连续的两行
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
pppp
uuuuuu
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
当增加两行及以上内容时,每行新增加的字符后要紧跟一个反斜杠,下一行要增加的内容要换行输入
4. 以行为单位进行替换
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed '3,5c ttttttttttttttttttt' #将文本的第3到5行替换为一行指定文本
1------------------------------------------------1
2------------------------------------------------2
ttttttttttttttttttt
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed '3,5c ttttttttttttttttttt\ #将文本的第3到5行替换成两行或以上指定文本
> pppppppppppppp'
1------------------------------------------------1
2------------------------------------------------2
ttttttttttttttttttt
pppppppppppppp
6------------------------------------------------6
7------------------------------------------------7
5. 以行为单位进行显示
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk
1------------------------------------------------1
2------------------------------------------------2
3------------------------------------------------3
4------------------------------------------------4
5------------------------------------------------5
6------------------------------------------------6
7------------------------------------------------7
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed -n '2p' #仅显示第二行
2------------------------------------------------2
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed -n '2,5p' '#仅显示第二到第五行
2------------------------------------------------2
3------------------------------------------------3
4------------------------------------------------4
5------------------------------------------------5
6. 字符串查找
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work$ cat kkk|sed -n '/3/p' #查找所有包含3的行,注意参数-n的使用
3------------------------------------------------3
3------------------------------------------------3
7. 删除最后几行
for i in `seq 10`; do sed -i '$d' aa ; done
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work/Now/Orthology/OrthoDB/Amel_Bimp/Existing_in_all_species$ cat aa|tail
"count": 6795,
"skip": 0,
"limit": 1000,
"query": "",
"level": 34735,
"url": "https://v101.orthodb.org//search?query=&level=34735&species=7460_0%2C132113_0&universal=1&singlecopy=",
"universal": 100,
"singlecopy": null,
"inclusive": 1
}
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work/Now/Orthology/OrthoDB/Amel_Bimp/Existing_in_all_species$ for i in `seq 10`; do sed -i '$d' aa ; done
(base) zhiyong@zhiyong-OptiPlex-7050:~/Work/Now/Orthology/OrthoDB/Amel_Bimp/Existing_in_all_species$ cat aa|tail
"115at34735",
"1667at34735",
"1002at34735",
"1242at34735",
"1937at34735",
"1413at34735",
"1118at34735",
"1398at34735",
"1255at34735"
],