Linux正则表达式sed 详述(2)

示例,删除文档中所有的数字's/[0-9]//g'  如删除文档中所有的字母's/[a-zA-Z]//g'删除所有的数字和字母's/[0-9a-zA-Z]//g'
[root@linuxidc ~]# 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@linuxidc ~]# sed 's/[a-z]//g' 1.txt 
::0:0:/://
::11:0::/://
::11:0::/://
::0:0:/://
1111111111111111111111111111111

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

示例,删除文档中不是数字的(英文字母和特殊符号)

[root@linuxidc ~]# sed 's/[^0-9]//g' 1.txt 
00
110
110
00
1111111111111111111111111111111

示例,把文档中的小写字母全部替换为大写字母 's/[a-z]/\u&/g'
[root@linuxidc ~]# 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@linuxidc ~]# 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@linuxidc ~]# sed -n '1s/[a-z]/\u&/g'p 1.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 ~]# cat 1.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 ~]# cat 1.txt 
ff:bb:cc:dd:ee:aa

在sed命令中引入shell变量

Linux下Shell编程——sed命令基本用法

Unix文本处理工具之sed 

sed 高级用法

sed命令详解与示例

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/16494.html