您的位置:首页 > 其它

20151202正则第四部分(grep,egrep,sed复习)

2015-12-02 17:02 225 查看
正则第四部分(grep,egrep,sed复习)

1.1
[root@niejicai-linux ~]# vim .bash_profile (针对用户的)。

1 # .bash_profile
2
3 # Get the aliases and functions
4 if [ -f ~/.bashrc ]; then
5 . ~/.bashrc
6 fi
7
8 # User specific environment and startup programs
9
10 PATH=$PATH:$HOME/bin
11
12 export PATH
13 alias grep='grep --color'
14 alias egrep='grep --color'
加上这两行就默认的显示颜色出来,做实验的时候可以去做一些!

1.2
grep
grep -E =egerp
-c打印符合要求的行
-n把打印符合要求的行,同时输出行号
-v 去反
-A, 打印符合要求的行同时,输出向下一行,A还可以加数字,比如A2。
-B, 打印符合要求的行同时,输出向上的一行,,B后面一个加数字,比如B2。
-C,打印符合要求的行同时,输出向下,向上各一行。C后面也可以接数字。

.表示任意一个字符(包括特殊符号)
* 表示零个或多个*前面的字符
.*任意个任意字符(经常叫为贪婪匹配)包括空行!
+一个或多个+前面的字符
?0个或一个?前面的字符

[root@niejicai-linux ~]# egrep --color 'r(oo){1,2}' 1.txt
表示1个或2个(oo)字符

可以这么认为:
grep-E =egrep
grep 和egrep的区别,就egrep可以使用| 、?、+,
然后grep不是可以使用的,除非加上-E

1.3
sed
-n (打印符合要求的行来) 通常和p一起用的!
-d 删除
-i 可以让文件继续生效
-r 转译(不想脱译的话,就加上-r)

打印1,到5行

[root@niejicai-linux ~]# sed '1,5p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
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

[root@niejicai-linux ~]# sed '/root/p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@niejicai-linux ~]# sed -r '/ro+t/p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@niejicai-linux ~]# sed -r '/ro+/d' 1.txt 包含ro+的行全部删除
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbi

。。。。。。。
把多个表达写连接起来

[root@niejicai-linux ~]# sed -e 'root/p' -e '/bash/p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
niejicai:x:500:500:niejicai:/home/niejicai:/bin/bash
xiaonie:x:501:501::/home/xiaonie:/bin/bash
user1:x:502:503::/home/user1:/bin/bash
user2:x:5505:5505::/home/user2:/bin/bash
user10:x:5506:5507::/home/user10:/bin/bash
user20:x:505:505::/home/user20:/bin/bash
user41:x:5562:500::/home/user41:/bin/bash
user42:x:5561:500::/home/user42:/bin/bash
user4:x:509:500:user4,ddddddddddd,aaaaaaaaaaa,111111111111111:/home/user444:/bin/bash
user0:x:5563:5563::/home/user0:/bin/bash

[root@niejicai-linux ~]# sed -e '/root/p;/bash/p' -n 1.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
niejicai:x:500:500:niejicai:/home/niejicai:/bin/bash
xiaonie:x:501:501::/home/xiaonie:/bin/bash
user1:x:502:503::/home/user1:/bin/bash
user2:x:5505:5505::/home/user2:/bin/bash
user10:x:5506:5507::/home/user10:/bin/bash
user20:x:505:505::/home/user20:/bin/bash
user41:x:5562:500::/home/user41:/bin/bash
user42:x:5561:500::/home/user42:/bin/bash
user4:x:509:500:user4,ddddddddddd,aaaaaaaaaaa,111111111111111:/home/user444:/bin/bash
user0:x:5563:5563::/home/user0:/bin/bash

替换(功能强大)

[root@niejicai-linux ~]# sed 's/[a-zA-Z]//g' 1.txt 替换成空就变成删除
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
。。。

把两个字符互相替换一下
基本的表达式:

(1)
[root@niejicai-linux ~]# sed -r 's/ / /g' 1.txt
(2)

[root@niejicai-linux ~]# sed -r 's/()()() / /g' 1.txt
(3)

[root@niejicai-linux ~]# sed -r 's/()()()/\3\2\1/g' 1.txt

小写变成大写

[root@niejicai-linux ~]# sed 's/[a-z]/\u&/g' 1.txt

大写变小写

[root@niejicai-linux ~]# sed 's/[A-Z]/\l&/g' 1.txt

[root@niejicai-linux ~]# sed -i 使得原文件生效。

sed把英文字母大小写转换

1.4
在test.txt 20行到末行最前面加 'aaa:'

[root@niejicai-linux ~]# sed '20,$s/.*/aaa:&/' 1.txt
root:x:0:0:root:/root:/bin/bash
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
aaa:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-au toipd:/sbin/nologin
aaa:pulse:x:498:496:PulseAudio System Daemon:/var/run/pulse:/sbi n/nologin
aaa:haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
aaa:ntp:x:38:38::/etc/ntp:/sbin/nologin
aaa:apache:x:48:48:Apache:/var/www:/sbin/nologin
aaa:saslauth:x:497:76:"Saslauthd user":/var/empty/saslauth:/sbin /nologin
aaa:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
aaa:abrt:x:173:173::/etc/abrt:/sbin/nologin
aaa:gdm:x:42:42::/var/lib/gdm:/sbin/nologin
aaa:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/n ologin
aaa:tcpdump:x:72:72::/:/sbin/nologin
aaa:niejicai:x:500:500:niejicai:/home/niejicai:/bin/bash
aaa:hacluster:x:496:493:heartbeat user:/var/lib/heartbeat/cores/ hacluster:/sbin/nologin
aaa:xiaonie:x:501:501::/home/xiaonie:/bin/bash
aaa:user1:x:502:503::/home/user1:/bin/bash
aaa:user2:x:5505:5505::/home/user2:/bin/bash
aaa:user10:x:5506:5507::/home/user10:/bin/bash
aaa:user20:x:505:505::/home/user20:/bin/bash
aaa:user41:x:5562:500::/home/user41:/bin/bash
aaa:user42:x:5561:500::/home/user42:/bin/bash
aaa:user4:x:509:500:user4,ddddddddddd,aaaaaaaaaaa,11111111111111 1:/home/user444:/bin/bash
aaa:user0:x:5563:5563::/home/user0:/bin/bash

练习题:

sed练习题:
1.把/etc/passwd 复制到/root/test.txt,用sed打印所有行
[root@niejicai-linux ~]# sed -n '1,$p' -n test.txt
2.打印test.txt的3到10行
[root@niejicai-linux ~]# sed -n '3,10p' test.txt
3.打印test.txt 中包含 'root' 的行
[root@niejicai-linux ~]# sed -n '/root/'p test.txt
4.删除test.txt 的15行以及以后所有行
[root@niejicai-linux ~]# sed -n '15,$p' test.txt
5.删除test.txt中包含 'bash' 的行
[root@niejicai-linux ~]# sed -n '/bash/p' test.txt
6.替换test.txt 中 'root' 为 'toor'
[root@niejicai-linux ~]# sed 's/root/toor/g' test.txt
7.替换test.txt中 '/sbin/nologin' 为 '/bin/login'
[root@niejicai-linux ~]#sed 's#sbin/nologin#bin/login#g' test.txt
8.删除test.txt中5到10行中所有的数字
[root@niejicai-linux ~]#Sed ‘5,10s/[0-9]//g’ test.txt

9.删除test.txt 中所有特殊字符(除了数字以及大小写字母)
10.把test.txt中第一个单词和最后一个单词调换位置
11.把test.txt中出现的第一个数字和最后一个单词替换位置
12把test.txt 中第一个数字移动到行末尾
13.在test.txt 20行到末行最前面加 'aaa:'
sed '20,$s/.*/aaa:&/' 1.txt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: