正则表达式和文本三剑客题型练习

1、显示/etc/passwd文件中以bash结尾的行;

解释:使用 grep 工具来搜索文件 /etc/passwd 中匹配模式 bash$ 的行。bash$ 是一个正则表达式,其中 $ 表示行结尾。因此,bash$ 匹配以 bash 结尾的行。

grep bash$ /etc/passwd

运行结果:

2、找出"netstat -tan”命令的结果中,以‘LISTEN’后跟0或多个空白字符结尾的行

方法一:

netstat -tan | grep "LISTEN[[:space:]]*$"

运行结果:

方法二:

netstat -tan | grep LISTENs*$

运行结果:

解释:LISTENs*$ 使用正则表达式匹配以 "LISTEN" 结尾且后面跟着 0 或多个空白字符的行。其中 s* 表示匹配 0 或多个空白字符,而 $ 表示行结尾 3、在/etc/fstab文件中不以#开头的行的行首增加#号

命令:

sed -i /^[^#]/ s/^/#/ /etc/fstab

解释:

    sed 是一个流式文本编辑器,用于对文件进行处理和转换。 -i 选项表示直接在原始文件上进行修改。 /^[^#]/ 是一个正则表达式模式,它匹配不以 # 开头的行。 s/^/#/ 是 sed 的替换命令,它将行首的开头(^)替换为 #。

执行该命令后,sed 将遍历 /etc/fstab 文件的每一行。对于不以 # 开头的行,sed 将在行首添加 # 号。这样就在这些行的行首增加了 # 号

4、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

sed -i /^#[[:blank:]]+/ s/^#// /etc/fstab

解释:

    /^#[[:blank:]]+/ 是正则表达式模式,它匹配以 # 开头且后面至少跟一个空白字符的行。[[:blank:]] 表示空白字符(包括空格和制表符),+ 表示匹配一个或多个空白字符。 s/^#// 是 sed 的替换命令,它将行首的 # 替换为空字符串,即删除行首的 # 号和空白字符。

5、统计出apache的access.log中访问量最多的5个IP

命令:

cat access.log | cut -d   -f 1 | sort | uniq -c | sort -nr | head -5

解释:

    cat access.log 用于将 access.log 文件的内容输出到标准输出。 cut -d -f 1 用于提取每行中的第一个字段,即 IP 地址。这里使用空格作为分隔符,-d 表示使用空格作为分隔符,-f 1 表示提取第一个字段。 sort 用于对 IP 地址进行排序。 uniq -c 用于计算每个 IP 地址出现的次数,并在每行前面显示计数。 sort -nr 用于按照计数值进行逆向排序,即按照访问量从高到低排序。 head -5 用于只显示前五行,即访问量最高的五个 IP 地址。
经验分享 程序员 微信小程序 职场和发展