sed命令和正则表达式
发布时间:2020-12-13 23:46:59 所属栏目:Linux 来源:网络整理
导读:sed命令和正则表达式 sed是一种在线的,非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为模式空间,接着用sed命令处理缓冲区的内容。处理完,把缓冲区的内容送往屏幕。 sed支持正则表达式 与grep一样,sed在文件中查
sed命令和正则表达式
sed是一种在线的,非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为模式空间,接着用sed命令处理缓冲区的内容。处理完,把缓冲区的内容送往屏幕。 sed命令:告诉sed对指定行进行何种操作 命令 功能 a 在当前行后添加一行或多行 c 用新文本修改(替换)当前行中的文本 d 删除行 i 在当前行之前插入文本 l 列出非打印字符 p 打印行 n 读入下一输入行,并从下一条命令而不是第一条命令处理 q 结束或退出sed ! 取反 s 用一个字符串替换另一个字符串 s 替换标识 g 全局替换 i 忽略大小写 r 从文件中读 w 将行写入文件 y 将字符转换成另一字符(不支持正则表达式) h 把模式空间里的内容复制到暂存缓冲区 选项选项 功能 -e 允许多项编辑 -f 指定sed脚本文件名 -n 取消默认的输出 -i inplace 直接修改 -r 支持扩展元字符 示例:head -10 /etc/passwd > passwd #取/etc/passwd做演示 # sed ‘‘ passwd (这里将passwd中的内容放到模式空间处理,因为没有执行任何命令,所以原封不动的返回值) # sed ‘d‘ passwd (读到每一行都执行删除的操作,所以不返回任何值) # sed ‘1,9d‘ passwd (读1-9行的内容,然后删除,最后输出的就只剩第十行) # sed -r ‘p‘ passwd (内容会重复两次,因为到模式空间处来会打印一次。然后print会再打印一次) # sed -rn ‘p‘ passwd (以静默的方式显示,进入模式空间被命令处理过的可以输出,原先内容就不输出) # sed -rn ‘/root/p‘ passwd (打印带root的行) # sed -rn ‘/^[rot]/p‘ passwd (打印包含r,o,t开头的行) # sed -rn ‘/^[^root}/p‘ passwd (打印不包含以r,o,t开头的行) # sed -r ‘s/root/alice/‘ passwd (替换root为alice,只替换了每行第一个) # sed -r ’s/root/alice/g‘ passwd (全局替换,都改) # sed -r ‘s#/sbin/nologin#/bin/ok#‘ passwd (使用#号或者@也可以,一般是带有/的 替换目录之类的操作,看起来更清晰) sed常用命令实例:替换命令s 扩展: ^$代表空行 空格直接敲就行 t代表tab键(制表符) [[email?protected] ~]# sed -r ‘s/root/alice/‘ passwd #替换每行第一个root为alice [[email?protected] ~]# sed -r ‘s/root/alice/g‘ passwd #替换每行root为alice [[email?protected] ~]# sed -r ‘1s/root/alice/g‘ passwd #只替换第一行的root为alice,想替换几行可以换成1,ns即可 [[email?protected] ~]# sed -ri ‘s/(^[sl])/#1/‘ passwd #将以s或者l开头的行作为一个组,替换时在前面加#,1是调用前面组的内容 [[email?protected] ~]# sed -r ‘s/^#//‘ passwd #将以#开头的行去掉#号 [[email?protected] ~]# sed -r ‘s/^[ |t|#]*$/test/‘ passwd #以空格或tab或#号或空行开头的行,替换为为test [[email?protected] ~]# sed -r ‘s#/var#/opt#‘ passwd #这里替换一个目录带/,那么可以将替换的/换成#,看起来更清晰 追加命令a #变量var=666666 #使用a追加变量的时候使用双引号,而不是单引号,单引号强引用,会去掉$var原本的含义,而不是我们的变量 [[email?protected] ~]# sed -ri ‘1a test1‘ passwd #在第一行后追加test1 [[email?protected] ~]# sed -ri ‘$a test$‘ passwd #在最后一行追加test$ [[email?protected] ~]# sed -ri ‘1,4a test$‘ passwd #在1-4行后追加test$ [[email?protected] ~]# sed -ri "2a $var" passwd #在第二行后追加$var [[email?protected] ~]# sed -ri "$a $var" passwd #在最后一行追加$var,加是为了转义,让$a就是最后一行的意思 替换命令c #与s替换大同小异,用新文本修改(替换)当前行中的文本,但这种替换需要准确内容,只有要相同的内容就统统改 [[email?protected] ~]# sed -ri ‘/6666/c7777‘ passwd #替换6666为7777 [[email?protected] ~]# sed -ri ‘/UseDNS no/cUseDNS yes‘ sshd_config #将UseDNS no替换为UseDNS yes 删除命令d [[email?protected] ~]# sed -ri ‘1d‘ passwd #删除第一行 [[email?protected] ~]# sed -ri ‘1,5d‘ passwd #删除1,5行 [[email?protected] ~]# sed -ri ‘/^#/d‘ passwd #删除以#号开头的行 [[email?protected] ~]# sed -ri ‘/^[ |t|#]*$/d‘ passwd #删除带有空格,tab,#,空行开头的行 小扩展:sed选项-e #一条sed语句中有多个命令的时候需要加-e,也可以用分号代替 [[email?protected] ~]# sed -ri -e ‘3,5d‘ -e ‘s/root/alice/‘ passwd [[email?protected] ~]# sed -ri ‘s/root/alice/;3,5d‘ passwd (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |