测试文档
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
查询
#打印全部数据和指定的行
[root@kylin236 ~ 12:43:48]# sed '2p' 1.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
#只打印要处理的行
[root@kylin236 ~ 12:44:37]# sed -n '2p' 1.txt
1 Liming 82 95 86 87.66
删除
#删除多行,删除2-4行,
[root@kylin236 ~ 23:11:07]# sed -i '2,4d' 1.txt
[root@kylin236 ~ 23:11:28]# cat 1.txt
me PHP Linux MySQL Average
3 Gao 99 83 93 91.66
增加
#在某行前面添加 sed ‘行号a 新字符串’ 文件
[root@kylin236 ~ 23:12:22]# sed -i '1a 111' 1.txt
[root@kylin236 ~ 23:12:41]# cat 1.txt
me PHP Linux MySQL Average
111
3 Gao 99 83 93 91.66
#在某行后面添加 sed ‘行号i 新字符串’ 文件
sed -i '2i 111' 1.txt 在第二行前面插入chw
//查看当前文档
[root@kylin236 ~ 23:12:41]# cat 1.txt
me PHP Linux MySQL Average
111
3 Gao 99 83 93 91.66
[root@kylin236 ~ 23:25:48]# sed -i '2i chw' 1.txt
[root@kylin236 ~ 23:26:22]# cat 1.txt
me PHP Linux MySQL Average
chw
111
3 Gao 99 83 93 91.66
改-替换
行替换 行号关键字 c :
命令格式1:sed ‘行号c 新字符串’ 文件
sed -i '2c qwerty' 1.txt
[root@kylin236 ~ 23:29:54]# sed -i '2c qwerty' 1.txt
[root@kylin236 ~ 13:44:27]# cat 1.txt
me PHP Linux MySQL Average
qwerty
111
3 Gao 99 83 93 91.66
命令格式2:sed ‘起始行号,终止行号c 新字符串’ 文件
//这里的把第二第三行字符串替换为1234,把第二第三行当成一个整体替换掉了。
[root@kylin236 ~ 07:29:21]# sed -i '2,3c 1234' 1.txt
[root@kylin236 ~ 07:37:56]# cat 1.txt
me PHP Linux MySQL Average
1234
3 Gao 99 83 93 91.66
替换某个具体的字符串 关键字:
‘s/原字符串/新字符串/‘
‘s/原字符串/新字符串/g’
g表示是不是全部要替换,没有g只匹配第一个,有行号就匹配当前行第一个,没有行号就匹配所有行第一个能找到的字符串
测试文档
[root@kylin236 ~ 13:46:12]# cat 1.txt
cwerty
chw
111
ch1
cccc
命令格式1:sed ‘4s/原字符串/新字符串/‘ 文件
加了行号,不加g,表示匹配指定行的第一个
[root@kylin236 ~ 14:19:07]# cat 1.txt
cwerty
chw
111
ch1
cccc
[root@kylin236 ~ 14:19:58]# sed -i '4s/h/c/' 1.txt
[root@kylin236 ~ 14:20:01]# cat 1.txt
cwerty
chw
111
cc1
cccc
命令格式2:sed ‘s/原字符串/新字符串/g’ 文件-
加了行号,加了g,表示替换文本中所有匹配的字符
[root@kylin236 ~ 14:20:01]# cat 1.txt
cwerty
chw
111
cc1
cccc
[root@kylin236 ~ 14:20:05]# sed -i 's/1/d/g' 1.txt
[root@kylin236 ~ 14:21:06]# cat 1.txt
cwerty
chw
ddd
ccd
cccc
命令格式3:sed ‘s/原字符串/新字符串/‘ 文件
如果不加行号只有s,也不加g,表示匹配所有行的第一个
[root@kylin236 ~ 14:21:06]# cat 1.txt
cwerty
chw
ddd
ccd
cccc
[root@kylin236 ~ 14:21:08]# sed -i 's/c/1/' 1.txt
[root@kylin236 ~ 14:22:54]# cat 1.txt
1werty
1hw
ddd
1cd
1ccc
命令格式4:sed ‘3s/原字符串/新字符串/g’ 文件
加了行号也加了g,就替换这行所有匹配的内容
命令格式3:sed 's/原字符串/新字符串/' 文件
[root@kylin236 ~ 14:22:54]# cat 1.txt
1werty
1hw
ddd
1cd
1ccc
[root@kylin236 ~ 14:24:17]# sed -i '3s/d/1/g' 1.txt 把第三行中所有的d都换成1
[root@kylin236 ~ 14:24:25]# cat 1.txt
1werty
1hw
111
1cd
1ccc
多条件操作 -e 指令
#替换多行
sed -e '2c 333' -e '3c 444' 1.txt
//查看当前文档
[root@kylin236 ~ 07:37:56]# cat 1.txt
qwerty
qhw
111
qh1
qccc
[root@kylin236 ~ 07:41:26]# sed -i -e '2c 333' -e '3c 444' 1.txt
[root@kylin236 ~ 07:41:33]# cat 1.txt
qwerty
333
444
qh1
qccc
#替换第二行和全局字符串
sed -i -e '2c 222' -e 's/1/5/g' 1.txt 替换第二行内容 同时替换全局所有 数字为1的字符替换成5
[root@kylin236 ~ 07:47:22]# cat 1.txt
111
222
444
qh1
qqqq
#替换全局多个字符串
sed -e 's/66/99/g ; s/qq/ss/g' 1.txt ---这个加-e 和不加-e 都效果都一样
正则应用
在第四行的行首加入#号
删除行尾空格
删除字符串只能用 s/cc//g 的方式让指定的字符串为空
sed -i ‘s/ $//g’ test