sed语法和基本命令

Sed 代表 Strem Editor(流编辑器),是操作、过滤和转换文本内容的强大工具。Sed 可以从文件和管道中读取输入。
sed基本语法:
sed [option] {sed-commands} {input-file}
sed的工作流程:
sed每次从input-file中读取一行记录,并在该行记录上执行sed-commands
sed首先从第一行读取记录,然后执行所有的sed-commands,然后读取第二行,执行所有sed-commands,重复这个过程直到input-file结束。通过[option]还可以给sed传递一些可选的参数。
 
sed选项
-e选项 : 执行多个命令
sed [option] -e {sed-command1} -e {sed-command2}{input-file} #例子 [root@linux520 ~]# sed -n -e '/^root/p' -e '/^nobody/p' /etc/passwd root:x:0:0:root:/root:/bin/bash nobody:x:99:99:Nobody:/:/sbin/nologin
打印模式空间(命令p)
root@kali:~/sed# sed 'p' employee.txt #不加-n的话 默认还会打印一遍 101,JohnDoe,CEO 101,JohnDoe,CEO 102,JasonSmith,ITManager 102,JasonSmith,ITManager 103,RajReddy,Sysadmin 103,RajReddy,Sysadmin 104,AnandRam,Developer 104,AnandRam,Developer 105,JaneMiller,SalesManager 105,JaneMiller,SalesManager root@kali:~/sed# sed -n 'p' employee.txt #加了-n 屏蔽默认打印 101,JohnDoe,CEO 102,JasonSmith,ITManager 103,RajReddy,Sysadmin 104,AnandRam,Developer 105,JaneMiller,SalesManager
 
指定地址范围
只打印第二行数据
root@kali:~/sed# sed -n '2p' employee.txt 102,JasonSmith,ITManager
打印1至4行数据
root@kali:~/sed# sed -n '1,4p' employee.txt 101,JohnDoe,CEO 102,JasonSmith,ITManager 103,RajReddy,Sysadmin 104,AnandRam,Developer
打印第二行到最后一行
root@kali:~/sed# sed -n '2,$p' employee.txt 102,JasonSmith,ITManager 103,RajReddy,Sysadmin 104,AnandRam,Developer 105,JaneMiller,SalesManager
修改地址范围
上面已经用过了逗号(表示从第n行到第m行)
+号(表示从第n开始的后m行)
root@kali:~/sed# sed -n '2,+2p' employee.txt 102,JasonSmith,ITManager 103,RajReddy,Sysadmin 104,AnandRam,Developer
~号(表示每次要跳过的行数)
root@kali:~/sed# sed -n '1~1p' employee.txt 101,JohnDoe,CEO 102,JasonSmith,ITManager 103,RajReddy,Sysadmin 104,AnandRam,Developer 105,JaneMiller,SalesManager root@kali:~/sed# sed -n '1~2p' employee.txt 101,JohnDoe,CEO 103,RajReddy,Sysadmin 105,JaneMiller,SalesManager
模式匹配
打印匹配jane的行
root@kali:~/sed# sed -n '/Jane/p' employee.txt #区分大小写 精准匹配 105,JaneMiller,SalesManager
打印第一次匹配Raj的行到最后所有的行
[root@linux520 ~]# sed -n '/Raj/,$ p' employee.txt 103,RajReddy,Sysadmin 104,AnandRam,Developer 105,JaneMiller,SalesManager
打印自匹配 Raj 的行开始到匹配 Jane 的行之间的所有内容:
$ sed -n '/Raj/,/Jane/ p' employee.txt 103,Raj Reddy,Sysadmin 104,Anand Ram,Developer 105,Jane Miller,Sales Manager
删除从第一次匹配Raj的行到最后一行
[root@linux520 ~]# sed '/Raj/,4 d' employee.txt 101,JohnDoe,CEO 102,JasonSmith,ITManager 105,JaneMiller,SalesManager [root@linux520 ~]# more employee.txt 101,JohnDoe,CEO 102,JasonSmith,ITManager 103,RajReddy,Sysadmin 104,AnandRam,Developer 105,JaneMiller,SalesManager
删除所有空行
[root@linux520 ~]# sed '/^$/d' testfile.txt 1 3 5 7 9 [root@linux520 ~]# more testfile.txt 1 3 5 7 9
删除所有注释行 假定为#开头
sed '/^#/ d' aria2.sh
保存匹配 Jason 的行以及紧跟在其后面的两行:
$ sed -n '/Jason/,+2 w output.txt' employee.txt
使用sed打印/etc/passwd文件所有的行
sed -n 'p' /etc/passwd #-n 为选项 'p'是打印命令 sed-command
 
 
 

posted @ 2021-06-03 14:14  bin_crack  阅读(267)  评论(0)    收藏  举报