sed命令详解
sed命令的选项(option):
-n :只打印模式匹配的行-e :直接在命令行模式上进行sed动作编辑,此为默认选项-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作-r :支持扩展表达式-i :直接修改文件内容
sed -n 'p' 打印行数 p前面定义行数 '1,3p'打印1到3行 '3p'打印3行 '/匹配项/p' 打印匹配字串
打印1到3行
[[email protected] log]# sed -n '1,3p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
打印第3行
[[email protected] log]# sed -n '3p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
打印匹配root的行
[[email protected] log]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
打印匹配字串root行到第4行
[[email protected] log]# sed -n '/root/,4p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
打印两个匹配字串例如root和loo之间的行 也可以打印时间范围
[[email protected] log]# sed -n '/root/,/loop/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
....
yyx:x:1000:1000::/home/yyx:/bin/bash
loop:x:1001:1001::/home/loop:/bin/bash
打印取反,匹配字串行取反 {=;p}会打印行号
[[email protected] log]# sed -n '1,5!{=;p}' /etc/passwd
6
sync:x:5:0:sync:/sbin:/bin/sync
7
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8
halt:x:7:0:halt:/sbin:/sbin/halt
[[email protected] log]# sed -n '1,5!p' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
删除1,5行
sed '2,5d' datafile
删除匹配字串到第二次匹配字串的行
sed '/loot/,/loop/d /etc/passwd'
删除匹配字串到第十行
sed '/loop/,10d' /opt/test.txt
正则表达式常用方法介绍
| 正则表达式 | 说明 |
|---|---|
| ^ | 锚点行首的符合条件的内容,用法格式”^pattern” |
| $ | 锚点行首的符合条件的内容,用法格式”pattern$” |
| ^$ | 空白行 |
| . | 匹配任意单个字符 |
| * | 匹配紧挨在前面的字符任意次(0,1,多次) |
| .* | 匹配任意长度的任意字符 |
| /? | 匹配紧挨在前面的字符0次或1次 |
| /{m,n/} | 匹配其前面的字符至少m次,至多n次 |
| /{m,/} | 匹配其前面的字符至少m次 |
| /{m/} | 精确匹配前面的m次{0,n}:0到n次 |
| /< | 锚点词首相当于 /b,用法格式:<pattern |
| /> | 锚点词尾,用法格式:>pattern |
| /<pattern/> | 单词锚点 |
| /(../) | 分组,用法格式:/(pattern/),引用/1,/2 |
| [] | 匹配指定范围内的任意单个字符 |
| [^] | 匹配指定范围外的任意单个字符 |
| [:digit:] | 所有数字, 相当于0-9, [0-9]—> [[:digit:]] |
| [:lower:] | 所有的小写字母 |
| [:upper:] | 所有的大写字母 |
| [:alpha:] | 所有的字母 |
| [:alnum:] | 相当于0-9a-zA-Z |
| [:space:] | 空白字符 |
| [:punct:] | 所有标点符号 |
sed -n '/r*t/p'/etc/passwd#打印匹配r有0个或者多个,后接一个t字符的行
sed -n '/.r.*/p'/etc/passwd#打印匹配有r的行并且r后面跟任意字符
sed -n '/o*/p'/etc/passwd#打印o字符重复任意次
sed -n '/o/{1,/}/p'/etc/passwd#打印o字重复出现一次以上
sed -n '/o/{1,3/}/p'/etc/passwd#打印o字重复出现一次到三次之间以上
sed编辑命令
| 参数 | 说明 |
|---|---|
| p | 打印匹配行(和-n选项一起合用) |
| = | 显示文件行号 |
| a|在定位行号后附加新文本信息 | |
| i/ | 在定位行号后插入新文本信息 |
| d | 删除定位行 |
| c/ | 用新文本替换定位文本 |
| w filename | 写文本到一个文件,类似输出重定向 > |
| r filename | 从另一个文件中读文本,类似输入重定向 < |
| s | 使用替换模式替换相应模式 |
| q | 第一个模式匹配完成后退出或立即退出 |
| l | 显示与八进制ACSII代码等价的控制符 |
| {} | 在定位行执行的命令组,用分号隔开 |
| n | 从另一个文件中读文本下一行,并从下一条命令而不是第一条命令开始对其的处理 |
| N | 在数据流中添加下一行以创建用于处理的多行组 |
| g | 将模式2粘贴到/pattern n/ |
| y | 传送字符,替换单个字符 |
sed -n '/^#/!p' /etc/nginx/conf/nginx.conf 表示取不是#号的行
sed -n '/^#/!{/^$/!p}' /etc/nginx/conf/nginx.conf 表示取不是#号开头和空行的行
sed -e '/^#/d' -e '/^$/d' /etc/nginx/conf/nginx.conf 表示删除#号开头的行和空行 -e 是执行多重任务
sed -n '1,/loop/p' /etc/passwd 打印第一行到loop行
sed -n '/loop/,4p' /etc/passwd 打印loop到第四行
sed -i '1 i/lool/' /opt/test.txt
sed '[email protected]@[email protected]' /opt/test.txt 替换第一次出现的loop为lood
sed '[email protected]@[email protected]' /opt/test.txt 替换前两行
sed '[email protected]@[email protected]'g /opt/test.txt 替换所有loop为lood
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/279806.html