Sed的简单用法
欢迎来到 来到大浪涛天的博客 !
提到sed很多人都不会陌生,它和grep,awk合称为文本编辑的三剑客,而且排行老二,所以它的强大不言而喻,当然言归正传,sed在文本编辑中的增删改查确实十分方便易用,用好了对之后的工作能提升很高的效率
Sed的简单用法
1. sed命令概述说明:
- sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功能不同凡响。
- 处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space)。
- 接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
- 接着理下一行,这样不断重复,直到文件末,内容没有改改变,除非使用了写入的命令,将内容更新。
- 定址用于决定对哪些行进行编辑。
- 地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
- sed命令属于字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作
2. sed命令作用说明:
- 擅长对行进行操作处理
- 擅长将文件的内容信息进行修改调整/删除
- 文件中添加信息的能力 (增) ok
- 文件中删除信息的能力 (删) ok
- 文件中修改信息的能力 (改)
- 文件中查询信息的能力 (查) OK
3. sed命令的语法信息
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
命令 参数 条件+处理= (指令) 处理文件信息
4. sed命令实践操作:
- 创建测试环境:
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF
4.1 sed命令查询信息方法
4.1.1 根据文件内容的行号进行查询:
- 显示单行信息
[root@oldboyedu ~]# sed -n '3p' person.txt
103,Alex,COO
- 根据行号信息,输出多行内容(连续)
[root@oldboyedu ~]# sed -n '1,3p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
- 根据行号信息,输出多行内容(不连续)
[root@oldboyedu ~]# sed -n '1p;3p' person.txt
101,oldboy,CEO
103,Alex,COO
4.2 根据文件内容的信息进行查询:
- 根据内容信息,输出单行内容
- 将有oldboy行的信息找出来
[root@oldboyedu ~]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
- 根据内容信息,输出多行内容(连续)
- 将有oldboy到alex行的信息都输出出来
[root@oldboyedu ~]# sed -n '/oldboy/,/Alex/p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
- 根据内容信息,输出多行内容(不连续)
- 将有oldboy和alex行的信息都输出出来
[root@oldboyedu ~]# sed -n '/oldboy/p;/Alex/p' person.txt
101,oldboy,CEO
103,Alex,COO
106,oldboy,CIO
4.3 sed命令添加信息方法
- 在文件第一行添加信息:
100,oldgirl,UFO
[root@oldboyedu ~]# sed '1i100,oldgirl,UFO' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
- 在文件最后一行添加信息:
[root@oldboyedu ~]# sed '$a108,oldgirl,UFO' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
108,oldgirl,UFO
4.4 测试在文件后面添加信息:
- 在第三行后面添加oldboy.txt信息
sed '3aoldboy.txt' person.txt
- 在第二行前面添加oldboy.txt信息
sed '2ioldboy.txt' person.txt
- 在有oldboy行的前面添加oldgirl 后面添加olddog信息
sed -e '/oldboy/ioldgirl' -e '/oldboy/aolddog' person.txt
[root@oldboyedu ~]# sed -e '/oldboy/ioldgirl' -e '/oldboy/aolddog' person.txt
100,oldgirl,UFO
oldgirl
101,oldboy,CEO
olddog
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
oldgirl
106,oldboy,CIO
olddog
4.5 在文件中添加多行信息
sed '$a100
101' person.txt
企业中编写配置文件:
IPaddress=10.10.10.1
mask=255.255.255.0
gateway=10.10.10.254
sed '$aIPaddress=10.10.10.1
mask=255.255.255.0
gateway=10.10.10.254' person.txt
4.6 sed命令删除信息方法
- 删除单行信息
[root@oldboyedu ~]# #删除文件中第三行信息
[root@oldboyedu ~]# sed '3d' person.txt
100,oldgirl,UFO
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
- 删除多行信息
[root@oldboyedu ~]# #删除文件中第二行到第六行内容
[root@oldboyedu ~]# sed '2,6d' person.txt
100,oldgirl,UFO
106,oldboy,CIO
- 删除有oldboy信息的行
sed '/oldboy/d' person.txt
- 删除文件中第二行到第六行内容
[root@oldboyedu ~]# sed '2,6d' person.txt
100,oldgirl,UFO
106,oldboy,CIO
- 删除文件中第三行和第六行内容
[root@oldboyedu ~]# sed '3d;6d' person.txt
100,oldgirl,UFO
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
106,oldboy,CIO
- 如何利用sed命令取消空行显示
[root@oldboyedu ~]# sed -n '/./p' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@oldboyedu ~]# sed '/^$/d' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@oldboyedu ~]# sed -n '/^$/!p' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
-
sed命令修改信息方法
-
sed 's#原有内容#修改后内容#g' 文件信息
[root@oldboyedu ~]# sed 's##oldgirl#old#g' person.txt
sed: -e expression #1, char 12: unknown option to `s'
[root@oldboyedu ~]# sed 's/#oldgirl/old/g' person.txt
100,old,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
- sed 's#()#
#g' 文件信息 后项引用前项进行替换修改
- 利用sed命令取出IP地址信息:
[test@test03 ~]$ ip a s eth0|sed -rn 's#^.*t (.*)/.*#1#gp'
10.211.55.3
- 修改文件内容直接进行自动备份
[test@test03 ~]$ sed -i.bak 's#old#new#g' test
[test@test03 ~]$ ls
test test.bak
- 在真实替换文件内容时候,一定不能让n和i参数同时出现
[root@oldboyedu ~]# sed -ni 's#Alex#aaaa#gp' person.txt
103,aaaa,COO
[root@oldboyedu ~]# cat person.txt
103,aaaa,COO
说明: ni和参数同时使用,会将文件内容进行清空
- 批量重命名,把test.txt重命名为test.jpg
[test@test03 test]$ touch test{1..3}.txt
[test@test03 test]$ ls test* |sed -r 's#(test.*)txt#mv 1txt 1jpg#g' |bash
[test@test03 test]$ ls
test1.jpg test2.jpg test3.jpg
[test@test03 test]$ ls test*|sed -r 's#(.*)jpg#mv & 1txt#g'|bash
[test@test03 test]$ ls test*|sed -r 's#(.*)txt#mv 1txt 1jpg#g'|bash
[test@test03 test]$ ls
test1.jpg test2.jpg test3.jpg
- 专业的重命名工具:rename
rename .txt .jpg oldboy*.txt
命令 需要修改的部分 改成的部分 需要修改的文件
例如:
[test@test03 test]$ rename .jpg .txt test*.jpg
[test@test03 test]$ ls
test1.txt test2.txt test3.txt
4.7 文件中添加内容方法:
- vim/vi
- cat >>xxx<EOF .. EOF
- echo -e "xxx xxx"
- sed 'na/i xxxx xxxx sxxxx'
5. sed小结
- sed命令小结
p print 输出信息
i insert 插入信息,在指定信息前面插入新的信息
a append 附加信息,在指定信息后面附加新的信息
d delete 删除指定信息
s substitute 替换信息 s###g(全局替换)
c 替换修改指定的一整行信息
[root@oldboyedu ~]# sed '2coldboyedu-sz-01' person.txt
103,aaaa,CEO
oldboyedu-sz-01
- sed命令的参数小结
-n 取消默认输出
-r 识别扩展正则
-i 真实编辑文件(将内存中的信息覆盖到磁盘中)
-e 识别sed命令多个操作指令