Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

第四周作业(正则表达式)

$
0
0

grep: Global search REgular expression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;

模式:由正则表达式的元字符及文本字符所编写出的过滤条件;

正则表达式引擎;

grep [OPTIONS] PATTERN [FILE…] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

OPTIONS:

color=auto:对匹配到的文本着色后高亮显示;

-i:ignorecase,忽略字符的大小写;

-o:仅显示匹配到的字符串本身;

-v, invert-match:反向匹配,显示不能被模式匹配到的行;

-E:支持使用扩展的正则表达式元字符;

-q, quiet, silent:静默模式,即不输出任何信息;

-A #:after, 后#行

-B #:before,前#行

-C #:context,前后各#行

基本正则表达式元字符:

字符匹配:

. :匹配任意单个字符;

[]:匹配指定范围内的任意单个字符; [^]:匹配指定范围外的任意单个字符; [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;

*:匹配其前面的字符任意次;0,1,多次;

例如:grep "x\+y"

abxy

aby

xxxxxy

yab

.*:匹配任意长度的任意字符

\?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;

\+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;

\{m\}:匹配其前面的字符m次;

\{m,n\}:匹配其前面的字符至少m次,至多n次;

\{0,n\}:至多n次

\{m,\}:至少m次

位置锚定:

^:行首锚定;用于模式的最左侧;

$:行尾锚定;用于模式的最右侧;

^PATTERN$:用于PATTERN来匹配整行;

^$:空白行;

^[[:space:]]*$:空行或包含空白字符的行;

单词:非特殊字符组成的连续字符(字符串)都称为单词;

\< 或 \b:词首锚定,用于单词模式的左侧;

\> 或 \b:词尾锚定,用于单词模式的右侧;

\<PATTERN\>:匹配完整单词;

分组及引用

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;

\(xy\)*ab

Note:分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

\3

He loves his lover.

He likes his lover.

She likes her liker.

She loves her liker.

~]# grep "\(l..e\).*\1" lovers.txt

后向引用:引用前面的分组括号中的模式所匹配到的字符;

egrep: 支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E

egrep [OPTIONS] PATTERN [FILE…]

选项:

-i, -o, -v, -q, -A, -B, -C

-G:支持基本正则表达式

扩展正则表达式的元字符:

字符匹配:

.:任意单个字符

[]:指定范围内的任意单个字符 [^]:指定范围外的任意单个字符

次数匹配:

*:任意次,0,1或多次;

?:0次或1次,其前的字符是可有可无的;

+:其前字符至少1次;

{m}:其前的字符m次;

{m,n}:至少m次,至多n次;

{0,n}

{m,}

位置锚定:

^:行首锚定;

$:行尾锚定;

\<, \b:词首锚定;

\>, \b:词尾锚定;

分组及引用:

():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;

后向引用:\1, \2, …

或:

a|b:a或者b;

C|cat:C或cat

(c|C)at:cat或Cat

fgrep:不支持正则表达式元字符;

当无需要用到元字符去编写模式时,使用fgrep必能更好;

1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。

[root@localhost ~]# cp -r /etc/skel /home/tuser1
[root@localhost ~]# chmod 700 /home/tuser1
[root@localhost ~]# ll -a /home/tuser1
total 16
drwx------ 3 root root 74 Dec 28 19:21 .
drwxr-xr-x. 11 root root 4096 Dec 28 19:21 .. #此为/home/tuser1的上一级目录
-rw------- 1 root root 18 Dec 28 19:21 .bash_logout
-rw------- 1 root root 193 Dec 28 19:21 .bash_profile
-rw------- 1 root root 231 Dec 28 19:21 .bashrcd
rwx------ 4 root root 37 Dec 28 19:21 .mozilla

2、编辑/etc/group文件,添加组hadoop。

[root@localhost ~]# vim /etc/group
peguin:x:2015:openstack
admins:x:2017:slackware
clouds:x:2018:nova:x:2019:openstack
mysql:x:983:
hadoop:x:2020: 编辑添加:G-->o在尾行添加

3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。

[root@localhost ~]# vim /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/tcsh
openstack:x:3003:2018::/home/openstack:/bin/bash
mysql:x:988:983::/home/mysql:/sbin/nologin
hadoop:x:2020:2020::/home/hadoop:sbin/bash #新添加用户

4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。

[root@localhost ~]# cp -r /etc/skel /home/hadoop
[root@localhost ~]# chmod 700 /home/hadoop
[root@localhost ~]# ll -a /home/hadoop
total 16
drwx------ 3 root root 74 Dec 28 19:44 .
drwxr-xr-x. 12 root root 4096 Dec 28 19:44 ..
-rw-r--r-- 1 root root 18 Dec 28 19:44 .bash_logout
-rw-r--r-- 1 root root 193 Dec 28 19:44 .bash_profile
-rw-r--r-- 1 root root 231 Dec 28 19:44 .bashrc
drwxr-xr-x 4 root root 37 Dec 28 19:44 .mozilla

5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。

[root@localhost ~]# chown -R hadoop:hadoop /home/hadoop
[root@localhost ~]# ll -a /home/hadoop
total 16
drwx------ 3 hadoop hadoop 74 Dec 28 19:44 .
drwxr-xr-x. 12 root root 4096 Dec 28 19:44 ..
-rw-r--r-- 1 hadoop hadoop 18 Dec 28 19:44 .bash_logout
-rw-r--r-- 1 hadoop hadoop 193 Dec 28 19:44 .bash_profile
-rw-r--r-- 1 hadoop hadoop 231 Dec 28 19:44 .bashrc
drwxr-xr-x 4 hadoop hadoop 37 Dec 28 19:44 .mozilla

6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;

[root@localhost ~]# grep -i "^s" /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 7144 kB
Slab: 87316 kB
SReclaimable: 51960 kB
SUnreclaim: 35356 kB [root@localhost ~]# grep "^[sS]" /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 7144 kB
Slab: 87308 kB
SReclaimable: 51960 kB
SUnreclaim: 35348 kB [root@localhost ~]# grep "^\(s\|S\)" /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 7144 kB
Slab: 87332 kB
SReclaimable: 51960 kB
SUnreclaim: 35372 kB

7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

[root@localhost ~]# grep -v "/sbin/nologin$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
Xfei:x:1000:1000:fei:/home/Xfei:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1003::/home/user3:/bin/bash
mageia:x:1100:1100::/home/linux:/bin/bash
slackware:x:2002:2016::/home/slackware:/bin/tcsh
openstack:x:3003:2018::/home/openstack:/bin/bash
hadoop:x:2020:2020::/home/hadoop:sbin/bash
[root@localhost ~]# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
root
sync
shutdown
halt
Xfei
user1
user2
user3
mageia
slackware
openstack
hadoop

8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

[root@localhost ~]# grep "/bin/bash" /etc/passwd | cut -d: -f1
root
Xfei
user1
user2
user3
mageia
openstack

9、找出/etc/passwd文件中的一位数或两位数;

[root@localhost ~]# grep -E "\<[0-9]{1,2}\>" /etc/passwd
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
...

10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

[root@localhost ~]# grep -E "^[[:space:]]+" /boot/grub/grub.conf
grep: /boot/grub/grub.conf: No such file or directory #好尴尬,没有此文件

11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

[root@localhost ~]# grep -E "^#[[:space:]]+[^[:space:]]" /etc/rc.d/rc.sys

Viewing all articles
Browse latest Browse all 11063

Trending Articles