1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > linux sed 正则提取字符串 linux正则表达式sed

linux sed 正则提取字符串 linux正则表达式sed

时间:2022-10-29 22:39:21

相关推荐

linux sed 正则提取字符串 linux正则表达式sed

sed、awk工具可以实现文本替换并且把替换的文本输出到屏幕上

sed和awk都是流式编辑器,是针对文档的行来操作的。sed通常用来替换操作。

示例的文本内容,以下操作根据此文本。[root@yonglinux~]#cattest.txt

rot:x:0:0:rot:/rot:/bin/bash

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

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

rooooot:x:0:0/roooooot:/bin/bash

11111111111111111111111111111111

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

1、打印某一行

sed-n'n'pfilename单引号内的n是一个数字,表示第几行;p也可以写到引号内;

示例,打印passwd第3-5行;[root@yonglinux~]#sed-n'3,5'p/etc/passwd

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

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打印所有行[root@yonglinux~]#sed-n'1,$'p/etc/passwd

打印某一行,并且要显示行号,需要和grep一起使用;[root@localhost~]#grep-n'.*'test.txt|sed-n'1'p

1:rrt

2、打印包含某个字符串的行

字符串需要用/ /括起来;grep中的特殊符号^ $ . * 同样适用于sed中。[root@yonglinux~]#sed-n'/root/'p/etc/passwd

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

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

打印包含/sbin/nologin的行,/需要进行脱意;[root@yonglinux~]#sed-n'/\/sbin\/nologin/'ppasswd

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

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打印以d开头的行;打印以in结尾的;打印r与o字母中间有2个任意字符的;打印包含2个o及多个o的行;[root@yonglinux~]#sed-n'/^d/'ptest.txt

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

[root@yonglinux~]#sed-n'/in$/'ptest.txt

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

[root@yonglinux~]#sed-n'/r..o/'ptest.txt

rooooot:x:0:0/roooooot:/bin/bash

[root@yonglinux~]#sed-n'/ooo*/'ptest.txt

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

rooooot:x:0:0/roooooot:/bin/bash

3、-e可以实现多个行为[root@yonglinux~]#sed-e'1'p-e'/111/'p-ntest.txt

rot:x:0:0:rot:/rot:/bin/bash

11111111111111111111111111111111

可以用-e写多个;-e相当于传送带,先匹配最前面的打印,再匹配后面的打印,所以第一行会打印2次;[root@localhost~]#sed-e'/root/p'-e'/bash/p'-n1.txt

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

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

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

user1:x:500:500::/home/user1:/bin/bash

user2:x:501:501::/home/user2:/bin/bash

-e后面也可以用;分号;-n不能写到-e的后面,可以写在-e的前面或最后面;[root@localhost~]#sed-e'/root/p;/bash/p'-n1.txt

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

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

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

user1:x:500:500::/home/user1:/bin/bash

user2:x:501:501::/home/user2:/bin/bash

4、删除某行或者多行

‘d’这个字符就是删除的动作了,不仅可以删除指定的单行以及多行,而且还可以删除匹配某个字符的行,另外还可以删除从某一行一直到文档末行。

示例,删除第一行;删除1-3行;删除包含root关键词的行;删除第3行到最后一行所有行;[root@yonglinux~]#sed'1'dtest.txt

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

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

rooooot:x:0:0/roooooot:/bin/bash

11111111111111111111111111111111

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

[root@yonglinux~]#sed'1,3'dtest.txt

rooooot:x:0:0/roooooot:/bin/bash

11111111111111111111111111111111

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

[root@yonglinux~]#sed'/root/'dtest.txt

rot:x:0:0:rot:/rot:/bin/bash

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

rooooot:x:0:0/roooooot:/bin/bash

11111111111111111111111111111111

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

[root@yonglinux~]#sed'3,$'dtest.txt

rot:x:0:0:rot:/rot:/bin/bash

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

5、替换字符或替换字符串

示例,替换第一行字母r为R;替换1-2行中ot为to;替换所有行中ot为to;[root@localhost~]#sed'1s/r/R/g'test.txt

RRt

[root@yonglinux~]#sed'1,2s/ot/to/g'test.txt

rto:x:0:0:rto:/rto:/bin/bash

roto:x:0:0:roto:/roto:/bin/bash

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

rooooot:x:0:0/roooooot:/bin/bash

11111111111111111111111111111111

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

[root@yonglinux~]#sed's#ot#to#g'test.txt

rto:x:0:0:rto:/rto:/bin/bash

roto:x:0:0:roto:/roto:/bin/bash

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

rooooto:x:0:0/roooooto:/bin/bash

11111111111111111111111111111111

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

与vim编辑器里面替换一样的命令格式,s代表替换,g代表全局,不加g的话只替换行的第一个;可以使用# @作为分隔符。

1s代表只替换第一行;1,3s代表第一行到第三行;不加行数的话默认为全部行。

示例,删除文档中所有的数字's/[0-9]//g' 如删除文档中所有的字母's/[a-zA-Z]//g'删除所有的数字和字母's/[0-9a-zA-Z]//g'[root@yonglinux~]#sed's/[0-9]//g'test.txt

rot:x:::rot:/rot:/bin/bash

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

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

rooooot:x::/roooooot:/bin/bash

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

示例,删除文档中所有的字母[root@yonglinux~]#sed's/[a-z]//g'1.txt

::0:0:/://

::11:0::/://

::11:0::/://

::0:0:/://

1111111111111111111111111111111

示例,删除文档中不是英文字母的(数字和特殊符号)[root@yonglinux~]#sed's/[^a-z]//g'1.txt

rotxrotbinbash

operatorxoperatorrootsbinnologin

operatorxoperatorroootsbinnologin

rooootxroooootbinbash

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

示例,删除文档中不是数字的(英文字母和特殊符号)[root@yonglinux~]#sed's/[^0-9]//g'1.txt

00

110

110

00

1111111111111111111111111111111

示例,把文档中的小写字母全部替换为大写字母's/[a-z]/\u&/g'[root@yonglinux~]#sed's/[a-z]/\u&/g'1.txt

ROT:X:0:0:/ROT:/BIN/BASH

OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN

OPERATOR:X:11:0:OPERATOR:/ROOOT:/SBIN/NOLOGIN

ROOOOT:X:0:0:/ROOOOOT:/BIN/BASH

1111111111111111111111111111111

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

示例,把文档中的大写字母全部替换为小写字母's/[A-Z]/\l&/g'[root@yonglinux~]#sed's/[A-Z]/\l&/g'1.txt

rot:x:0:0:/rot:/bin/bash

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

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

roooot:x:0:0:/rooooot:/bin/bash

1111111111111111111111111111111

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

替换的同时加-n p 打印特定的行;[root@yonglinux~]#sed-n'1s/[a-z]/\u&/g'p1.txt

ROT:X:0:0:/ROT:/BIN/BASH

6、调换二个字符串的位置

sed-r's/([^:]+)(:.*:)([^:]+$)/\3\2\1/'

[^:]非冒号,不是冒号的所有字符

-r, --regexp-extended在脚本中使用扩展正则表达式; 加r选项的意思为后面不用再加脱意\

( )括号括起来是分段的意思,

\3\2\1 是代表3调换1,后面的内容调换到前面

示例,aa与ff调换;加-r选项不用加脱意符号\;不加-r ( )括号左右都需要加\脱意;调换多行用最后一个;[root@localhost~]#cat1.txt

aa:bb:cc:dd:ee:ff

[root@localhost~]#sed-r's/(aa)(.*)(ff)/\3\2\1/'1.txt

ff:bb:cc:dd:ee:aa

[root@localhost~]#sed's/\(aa\)\(.*\)\(ff\)/\3\2\1/'1.txt

ff:bb:cc:dd:ee:aa

[root@localhost~]#sed-r's/([^:]+)(:.*:)([^:]+$)/\3\2\1/'1.txt

ff:bb:cc:dd:ee:aa

示例,rot与/bin/bash进行调换[root@localhost~]#grep'rot'test.txt

rot:x:0:0:rot:/rot:/bin/bash

[root@localhost~]#grep'rot'test.txt|sed's/\(rot\)\(.*\)\(\/bin\/bash\)/\3\2\1/'

/bin/bash:x:0:0:rot:/rot:rot

[root@localhost~]#grep'rot'test.txt|sed-r's/(rot)(.*)(/bin/bash)/\3\2\1/'

sed:-e表达式#1,字符18:“s”的未知选项

[root@localhost~]#grep'rot'test.txt|sed-r's/(rot)(.*)(\/bin\/bash)/\3\2\1/'

/bin/bash:x:0:0:rot:/rot:rot

加-r 后()内的/bin/bash 也还需要脱意才可以;

-i 选项 直接替换字符,并且保存原文件里面。使用i选项前,记得备份原文件。[root@localhost~]#sed-r-i's/([^:]+)(:.*:)([^:]+$)/\3\2\1/'1.txt

[root@localhost~]#cat1.txt

ff:bb:cc:dd:ee:aa

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。