Linux面试题:正则表达式习题实战精选(一题多解)

正则表达式习题精选

基础部分

  1. 找出/proc/meminfo文件中,所有以大小或小写s开头的行,至少三种方式

    grep -E '^(s|S)' /proc/meminfo								//扩展模式
    grep -i '^s' /proc/meminfo									//忽略大小写
    sed -r -n '/^(s|S)/p' /proc/meninfo							//sed模式
    
  2. 显示当前系统上root,centos或者user1用户的相关信息

    cat /etc/passwd |grep -E '^(root|centos|user1)\>'//左边开头且右边是同类型字符
    
  3. 找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行

    grep -P '\b\w*\b\(\)' /etc/rc.d/init.d/functions
    grep -E '\b([a-zA-Z]|_|[0-9])*\b\(\)' /etc/rc.d/init.d/functions
    grep -Eo "[_[:alnum:]]+\(\)"					//[:alnum:]字母和数字
    
  4. 使用echo命令输出一绝对路径,使用grep取出其基名(basename)

    echo /etc/rc.d/init.d/functions |grep -Po  '\b/\w*$'|grep -Po '\w*'
    echo /etc/sysconifg/network-srcipts/ifcfg-ens33 |grep -Eo "\<[^/]+/?$"
        //没有以/开头且没有以/结尾的字符串
    
  5. 取出其路径名,类似dirname命令的结果

    1. 找出ifconfig命令结果中1-255之间的数值

    ifconfig |grep -P ‘\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b’

    
    2. 添加用户bash,testbash,basher以及nologin(其shell为/sbin/nologin);然后找出/etc/passwd文件用 户名同shell名的行
    
    ```c
    cat /etc/passwd |grep -E  '^(\w*):.*\1$'
    cat /etc/passwd |grep -E "^(\<.*\>):.*\1$"     //(???)  \1
    grep -E "^[^:]+\>"							//逆向思考
    grep -Eo "^([^:]+\>).*\1$"
    
    1. 获取ifconfig中命令的ip地址,使用三种方式实现
    方法一:
    ifconfig|grep -oE "inet [0-9.]+ "|awk '{print $2}'       //辅助awk
    方法二:
    ifconfig|grep -oP '(?<=inet )(.*)(?=netmask)'              //零宽断言
    方法三:
    //三类ip地址第一个字段范围:A:1-127;B:128-191;C:192-223,合并起来就是1-223,第二第三字段是0-255,最后一个字段是1-254
    ifconfig |grep -oP '\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[01][0-9]|22[0-3])\b\.(\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\.){2}\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b'
    方法四:    
    ifconfig | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'   //简单粗暴有瑕疵
    方法五:
    ifconfig |grep -o '\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b'							//简单无脑粗暴
    

进阶部分

  1. 只在目录中所有的.php和.html文件中递归搜索字符"main{}"

    grep -r "main{}" . --include *.{php,html}
    
  2. 在搜索结果中排除所有README文件

    grep -r  "main{}" . --exclude "README"
    
  3. 在搜索结果中排除filelist文件列表里的文件

    grep -r "main{}" . --exclude-from filelist
    
  4. 在多级目录中对文本进行递归搜索

    grep -r -n -E '^(#!/bin/bash)' .   //. 指的是当前目录路径
    
  5. 搜索多个文件并查找匹配文本在哪些文件中

    grep -n "root" /etc/fstab /etc/shadow /etc/passwd
    
  6. 搜索fstab开头不是英文字母的行,并显示行号

    第一种:
    cat /etc/fstab|grep -nv '^[a-zA-Z]'	  //反向选择
    第二种:
    cat /etc/fstab |grep -n "^[^a-zA-Z]"  //反向选择
    
  7. 搜索fstab中c后面跟1,2个d,后面再跟一个3的字符串的行

    cat /etc/fstab|grep -E  'cd{1,2}3'
    
  8. 过滤空行和开始为#开始的行

#cat /etc/fstab|grep -vE '^$|^#'
  1. 找出/etc/rc.d/rc.sysinit或/etc/grub.conf文件中,以至少一个空白字符开头,且后面存在非空白字符的行

    cat  /etc/grub2.cfg|grep -P '^(\s{1,})\S'
    cat  /etc/grub2.cfg|grep -P  '^\s+\S'
    
  2. 列出系统所有系统用户

    cat /etc/passwd |awk -F: '$3>=1 && $3 <=1000{print $1}'
    
  3. 过滤functions文件中,以单词或者单词前面跟了一个"_"开头的行,并显示前后2行

    grep -P -C 2 '^_?\b\w+\b' /etc/rc.d/init.d/functions
    grep -E2 "^[_[:alnum:]]+\\(\\)" /etc/rc.d/init.d/functions
    

高级部分

  1. 显示/etc/rc.d/rc.sysinit中以#开头,且后面跟了一个或多个空白字符,而后又跟了任意非空白字符的行

    grep -P -n '^#\s+\S*' /etc/rc.d/rc.sysinit
    
  2. 查找/proc/cpuinfo文件中关键字flags,并显示前后一行

    grep -C 1 'flags' /proc/cpuinfo
    
  3. 查找包含至少一个root关键字的文件

    //内容包含:  grep -P -r '(root)+' .
    find  . -type f  -print0| xargs -0 grep -c banana |grep -v ":0$"
    
  4. 查找文本中的所有qq邮箱(进阶:查找所有邮箱)

    grep -P '^[1-9]{1}[0-9]{5,9}@qq.com' ./mail.txt
    
  5. 查找/etc目录下,所有包含root关键字的文件,并显示文件路径及文件名

    grep -l -r 'root' /etc | xargs ls -l
    
  6. 监控日志文档中产生Error的行,并只打印包含Error的行

tailf -f /var/log/nginx/error.log |grep --line-buffer 'Error' //行缓冲:每更新一行就监控控一行

课堂练习

1.定义一个ipadd的变量,此变量的内容为eth0的网卡ip,并要求此变量在所有的shell中都能生效

ipadd=`ifconfig ens33 | grep 'inet.*netmask'|awk '{print $2}'
export ipadd

2.将系统环境变量PATH的值改为/bin,然后执行passwd 修改当前用户的密码能成功么

不能,passwd命令的文件路径为:/usr/bin/passwd,PATH路径设置为/bin后,直接执行passwd是找不到符合的路径

3.将当前的系统的语言环境变成中文(如已是中文则切换成英文),并永久生效

export LANG="zh_CN.UTF-8"

4.找出系统中小于1k的文件并复制到/var/tmp/find_dir中,并放入后台执行

mkdir -p /var/tmp/find_dir;find -size -1k -exec cp -a {} /var/tmp/find_fir \; > /dev/null &

5.对系统的组账户文件统计,并对他们的gid做排序,输出到文件~/gid.txt,并对输出做行数统计

sort -t: -k3 -n /etc/group |tee ~/gid.txt |wc -l

6.使用sed直接对文件~/install.log做修改,将x86_64全部修改为i386,并生成备份文件

 |sed -i.bak's/x86_64/i386/g' ~/install.log
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值