加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式-sed-用法详解

发布时间:2020-12-14 00:57:56 所属栏目:百科 来源:网络整理
导读:sed命令: sed是一种流编辑器,它是文本处理中非常使用的工具,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着

sed命令:

sed是一种流编辑器,它是文本处理中非常使用的工具,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。


sed语法格式:

sed [options] 'command' file

匹配字符集

^匹配行开始,如:/^sed/匹配所有以sed开头的行。
$匹配行结束,如:/sed$/匹配所有以sed结尾的行。
.匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
*匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
(..)匹配子串,保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。
&保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
&;匹配单词的开始,如:/匹配单词的结束,如/love
&;/匹配包含以love结尾的单词的行。
x{m}重复字符x,m次,如:/0{5}/匹配包含5个0的行。
x{m,}重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。
x{m,n}重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。
sed命令常见用法:

打印指定行

[root@test1~]#grep-n'.*'passwd|sed'10'p-n

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

#打印第10行

[root@test1~]#grep-n'.*'passwd|sed'1,3'p-n

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

#打印第1-3行

[root@test1~]#grep-n'.*'passwd|sed'22,$'p-n

sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

mysql:x:500:500::/home/mysql:/sbin/nologin

zabbix:x:501:501::/home/zabbix:/sbin/nologin

#打印第22行到最后

打印匹配字符的行

[root@test1~]#sed-n'/root/'ppasswd

[root@test1~]#sed-n'/r(oo)+t/'ppasswd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@test1~]#sed-r-n'/r(oo)+t/'ppasswd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

#可以使用^$.*+?()等特殊符号正则表达式需要脱义或者使用-r参数

打印多个匹配字符的行 2中方法

[root@test1~]#grep-n'.*'passwd|sed-n-e'/root/'p-e'/mysql/'p

1:root:x:0:0:root:/root:/bin/bas/mysqlh

1:root:x:0:0:root:/root:/bin/bas/mysqlh

11:operator:x:11:0:operator:/root:/sbin/nologin

22:mysql:x:500:500::/home/mysql:/sbin/nologin

#第一行同时匹配2个字符输出2次流式编辑器特点

[root@test1~]#grep-n'.*'passwd|sed-n'/root/p;/mysql/p'

root:x:0:0:root:/root:/bin/bas/mysqlh

root:x:0:0:root:/root:/bin/bas/mysqlh

operator:x:11:0:operator:/root:/sbin/nologin

删除以数字开头的行

[root@test1~]#sed-r'/[^0-9]/'dpasswd

替换 sed的主要功能就是用来替换

[root@test1~]#sed'1,2s/ot/to/g'passwd
roto:x:0:0:roto:/roto:/bin/bas/mysqlh
bin:x:1:1:bin:/bin:/sbin/nologin
#其中s表示替换,g表示全局替换,否则只替换一次,/也可以为#、@等

删除第一行所有数字

[root@test1~]#grep'.*'passwd|sed'1,1s/[0-9]//g'
root:x:::root:/root:/bin/bas/mysqlh
bin:x:1:1:bin:/bin:/sbin/nologin

调换两个字符串位置

[root@test1~]#head-2passwd|sed-r's/([^:]+)(:.*:)([^:]+$)/321/g'
/bin/bas/mysqlh:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin

直接修改文件内容

[root@test1 ~]# sed -i 's/ot/to/g' 1.txt

正则表达式w+匹配每一个单词,使用[&]替换它,&对应于之前所匹配到的单词:
[root@test1~]#echothisisatestline|sed's/w+/[&]/g'
[this][is][a][test][line]

从文件读入:r命令

file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面:

sed'/test/rfile'filename

写入文件:w命令

在example中所有包含test的行都被写入file里:

sed-n'/test/wfile'example

追加(行下):a命令

将thisisatestline追加到以test开头的行后面:
sed'/^test/athisisatestline'file在test.conf
文件第2行之后插入thisisatestline
sed-i'2athisisatestline'test.conf

下一个:n命令

如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续

sed'/test/{n;s/aa/bb/;}'file

变形:y命令

把1~10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令

sed'1,10y/abcde/ABCDE/'file
sed'1,10s/[a-z]/u&/g'file
sed'1,10s/[A-Z]/l&/g'file

退出:q命令

打印完第10行后,退出

sedsed'10q'file

打印奇数行或偶数行

方法1: sed -n 'p;n' test.txt #奇数行

sed-n'n;p'test.txt#偶数行

方法2: sed -n '1~2p' test.txt #奇数行

sed-n'2~2p'test.txt#偶数行

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读