第一题
-
显示/etc/passwd文件中以nologin结尾的行
1>基本正则表达式常见元字符
元字符 | 说明 |
---|---|
^ | 以某个字符开头 或 行首 |
$ | 以某个字符结尾 或行尾 |
. | 匹配任意单字符 |
* | 对前一项进行0次或者多次重复匹配 |
{m,n} | 将前一项字符重复m-n次,{m,},{,n},{m,n} |
[] | 对方括号内的单字符进行匹配 |
[^] | 不匹配方括号内的单字符 |
^[] | 匹配以某个字符开头的行 |
() | 定义一个子表达式 |
词首【<或\b】和词尾锚定【>或者\b】 | 其后面的任意字符必须作为单词首部出现;其前面的任意字符必须作为单词尾部出现 |
\ | 转义字符,让一些特殊符号失效 |
2>编辑
[root@server ~]# grep nologin$ /etc/passwd
或者
[root@server ~]# awk -F ":" '/nologisn$/{print $0}' /etc/passwd
3>测试结果
第二题
-
找出"nestat -tan"命令的结果中以‘LISTEN’后跟0或多个空白字符结尾的行
1>基本正则表达式POSIX字符类
正则表达式 | 描述 | 示例 |
---|---|---|
[:alnum:] | 匹配任意一个字母或数字字符 | [[:alnum:]]+ |
[:alpha:] | 匹配任意一个字母字符(包括大小写字母) | [[:alpha:]] |
[:blank:] | 空格与制表符(横向和纵向) | [[:blank:]]* |
[:digit:] | 匹配任意一个数字字符 | [[:digit:]]? |
[:lower:] | 匹配小写字母 | [[:lower:]] |
[:upper:] | 匹配大写字母 | ([[:upper:]]+)? |
[:punct:] | 匹配标点符号 | [[:punct:]] |
[:space:] | 匹配一个包括换行符、回车等在内的所有空白符 | [[:space:]]+ |
[:graph:] | 匹配任何一个可以看得见的且可以打印的字符 | [[:graph:]] |
[:xdigit:] | 任何一个十六进制数(即:0-9,a-f,A-F) | [[:xdigit:]]+ |
[:cntrl:] | 任何一个控制字符(ASCII字符集中的前32个字符) | [[:cntrl:]] |
[:print:] | 任何一个可以打印的字符 | [[:print:]] |
2>编辑
[root@server ~]# netstat -tan | grep "LISTEN[[:space:]]*$"
或者
[root@server ~]# netstat -tan | grep "LISTEN[[:space:]]*\"
或者
[root@server ~]# netstat -tan | awk '/LISTEN[[:space:]]*\>/{print $0}'
3>测试结果
第三题
-
在/etc/fstab文件中不以#开头的行的行首增加#号
1>涉及知识
-
在基准正则表达式中。[^]表示:不匹配方括号内的单字符
-
-i:直接编辑原文件,而不是由屏幕输出,默认不对原文件进行操作
-
文本替换的格式:
sed -参数 '行范围s/旧字符串/新字符串/替换标记' 文件名
2>编辑
[root@server ~]# sed 's/^[^#]/#/' /etc/fstab
3>测试结果
第四题
-
删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
1>涉及知识
-
本题使用文本替换删除,格式:
sed -参数 '行范围s/旧字符串/新字符串/替换标记' 文件名
-
-r:使用扩展正则表达式
-
-i:直接编辑原文件,而不是由屏幕输出,默认不对原文件进行操作
-
扩展正则表达式
元字符 | 说明 |
---|---|
? | 将前一项字符进行0次或者1次的重复匹配 |
+ | 将前一项进行1次或者多次的重复匹配 |
(|) | 匹配|符号左边或者右边的字符 |
2>编辑
[root@server ~]# sed -r 's/^#[[:space:]]?//' /etc/fstab
或者
[root@server ~]# sed -r "s/(#|#[[:space:]]+)//" /etc/fstab
3>测试结果