sed 命令详解

2022/8/11 6:22:44

本文主要是介绍sed 命令详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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
 


这篇关于sed 命令详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程