sed命令和正则表达式

您所在的位置:网站首页 sed命令正则 sed命令和正则表达式

sed命令和正则表达式

#sed命令和正则表达式| 来源: 网络整理| 查看: 265

sed命令和正则表达式 sed是一种在线的,非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为模式空间,接着用sed命令处理缓冲区的内容。处理完,把缓冲区的内容送往屏幕。 sed支持正则表达式 与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。正则表达式是括在斜杠间的模式,>用于查找和替换,以下是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键(制表符) [root@localhost ~]# sed -r 's/root/alice/' passwd #替换每行第一个root为alice [root@localhost ~]# sed -r 's/root/alice/g' passwd #替换每行root为alice [root@localhost ~]# sed -r '1s/root/alice/g' passwd #只替换第一行的root为alice,想替换几行可以换成1,ns即可 [root@localhost ~]# sed -ri 's/(^[sl])/#\1/' passwd #将以s或者l开头的行作为一个组,替换时在前面加#,\1是调用前面组的内容 [root@localhost ~]# sed -r 's/^#//' passwd #将以#开头的行去掉#号 [root@localhost ~]# sed -r 's/^[ |\t|#]*$/test/' passwd #以空格或tab或#号或空行开头的行,替换为为test [root@localhost ~]# sed -r 's#/var#/opt#' passwd #这里替换一个目录带/,那么可以将替换的/换成#,看起来更清晰

追加命令a

#变量var=666666 #使用a追加变量的时候使用双引号,而不是单引号,单引号强引用,会去掉$var原本的含义,而不是我们的变量 [root@localhost ~]# sed -ri '1a test1' passwd #在第一行后追加test1 [root@localhost ~]# sed -ri '$a test$' passwd #在最后一行追加test$ [root@localhost ~]# sed -ri '1,4a test$' passwd #在1-4行后追加test$ [root@localhost ~]# sed -ri "2a $var" passwd #在第二行后追加$var [root@localhost ~]# sed -ri "\$a $var" passwd #在最后一行追加$var,加\是为了转义,让$a就是最后一行的意思

替换命令c

#与s替换大同小异,用新文本修改(替换)当前行中的文本,但这种替换需要准确内容,只有要相同的内容就统统改 [root@localhost ~]# sed -ri '/6666/c7777' passwd #替换6666为7777 [root@localhost ~]# sed -ri '/UseDNS no/cUseDNS yes' sshd_config #将UseDNS no替换为UseDNS yes

删除命令d

[root@localhost ~]# sed -ri '1d' passwd #删除第一行 [root@localhost ~]# sed -ri '1,5d' passwd #删除1,5行 [root@localhost ~]# sed -ri '/^#/d' passwd #删除以#号开头的行 [root@localhost ~]# sed -ri '/^[ |\t|#]*$/d' passwd #删除带有空格,tab,#,空行开头的行

小扩展:sed选项-e

#一条sed语句中有多个命令的时候需要加-e,也可以用分号代替 [root@localhost ~]# sed -ri -e '3,5d' -e 's/root/alice/' passwd [root@localhost ~]# sed -ri 's/root/alice/;3,5d' passwd 原文链接

https://blog.51cto.com/13760226/2412079

服务推荐 蜻蜓代理代理ip微信域名拦截检测微信域名检测api


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3