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

​ 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 'LISTEN\s*$'

 运行结果:

解释:LISTEN\s*$' 使用正则表达式匹配以 "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 地址。

猜你喜欢

转载自blog.csdn.net/m0_68976043/article/details/130873109