Preguntas de la entrevista de Linux: una selección de ejercicios de expresión regular (una pregunta con múltiples soluciones)

Selección de ejercicios de expresión regular

Parte basica

  1. Descubra todas las líneas que comienzan con tamaño o s minúsculas en el archivo / proc / meminfo, al menos de tres maneras

    grep -E '^(s|S)' /proc/meminfo								//扩展模式
    grep -i '^s' /proc/meminfo									//忽略大小写
    sed -r -n '/^(s|S)/p' /proc/meninfo							//sed模式
    
  2. Muestra información sobre usuarios root, centos o user1 en el sistema actual

    cat /etc/passwd |grep -E '^(root|centos|user1)\>'//左边开头且右边是同类型字符
    
  3. Busque la línea en el archivo /etc/rc.d/init.d/functions donde una palabra va seguida de un paréntesis

    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. Use el comando echo para generar una ruta absoluta y use grep para recuperar su nombre base (nombre base)

    echo /etc/rc.d/init.d/functions |grep -Po  '\b/\w*$'|grep -Po '\w*'
    echo /etc/sysconifg/network-srcipts/ifcfg-ens33 |grep -Eo "\<[^/]+/?$"
        //没有以/开头且没有以/结尾的字符串
    
  5. Saque su nombre de ruta, similar al resultado del comando dirname

    1. Encuentre el valor entre 1-255 en el resultado del comando ifcon fi g

    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. Obtenga la dirección IP del comando en ifcon fi g, usando tres formas de lograr
    方法一:
    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'							//简单无脑粗暴
    

Parte avanzada

  1. Busque de forma recursiva el carácter "main {}" en todos los archivos .php y .html del directorio

    grep -r "main{}" . --include *.{
          
          php,html}
    
  2. Excluir todos los archivos README de los resultados de búsqueda

    grep -r  "main{}" . --exclude "README"
    
  3. Excluir archivos de la lista de archivos de los resultados de la búsqueda

    grep -r "main{}" . --exclude-from filelist
    
  4. Búsqueda recursiva de texto en directorios de varios niveles

    grep -r -n -E '^(#!/bin/bash)' .   //. 指的是当前目录路径
    
  5. Busque varios archivos y encuentre en qué archivos está el texto coincidente

    grep -n "root" /etc/fstab /etc/shadow /etc/passwd
    
  6. Busque líneas que no sean letras en inglés al principio de fstab y muestre el número de línea

    第一种:
    cat /etc/fstab|grep -nv '^[a-zA-Z]'	  //反向选择
    第二种:
    cat /etc/fstab |grep -n "^[^a-zA-Z]"  //反向选择
    
  7. Busque la línea en fstab donde c va seguida de 1, 2 d, seguida de una cadena de 3

    cat /etc/fstab|grep -E  'cd{1,2}3'
    
  8. Filtrar líneas en blanco y líneas que comienzan con #

#cat /etc/fstab|grep -vE '^$|^#'
  1. Busque la línea en el archivo /etc/rc.d/rc.sysinit o /etc/grub.conf que comienza con al menos un carácter en blanco y tiene caracteres no en blanco después

    cat  /etc/grub2.cfg|grep -P '^(\s{1,})\S'
    cat  /etc/grub2.cfg|grep -P  '^\s+\S'
    
  2. Lista de todos los usuarios del sistema del sistema

    cat /etc/passwd |awk -F: '$3>=1 && $3 <=1000{print $1}'
    
  3. En el archivo de funciones de filtrado, se muestra una palabra o una línea que comienza con un "_" delante de una palabra, y se muestran las dos líneas antes y después.

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

Parte avanzada

  1. Muestre la línea que comienza con # en /etc/rc.d/rc.sysinit, seguida de uno o más caracteres en blanco, y luego cualquier carácter que no esté en blanco

    grep -P -n '^#\s+\S*' /etc/rc.d/rc.sysinit
    
  2. Busque las banderas de palabras clave en el archivo / proc / cpuinfo y muestre las líneas anteriores y siguientes

    grep -C 1 'flags' /proc/cpuinfo
    
  3. Busque archivos que contengan al menos una palabra clave raíz

    //内容包含:  grep -P -r '(root)+' .
    find  . -type f  -print0| xargs -0 grep -c banana |grep -v ":0$"
    
  4. Buscar todos los buzones de correo qq en el texto (avanzado: buscar todos los buzones de correo)

    grep -P '^[1-9]{1}[0-9]{5,9}@qq.com' ./mail.txt
    
  5. Busque todos los archivos que contengan la palabra clave raíz en el directorio / etc y muestre la ruta y el nombre del archivo

    grep -l -r 'root' /etc | xargs ls -l
    
  6. Supervise la línea que produce el error en el archivo de registro e imprima solo la línea que contiene el error

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

Práctica en el aula

1. Defina una variable ipadd, el contenido de esta variable es la ip de la tarjeta de red eth0 y requiere que esta variable sea efectiva en todos los shells

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

2. Cambie el valor de la variable de entorno del sistema PATH a / bin y luego ejecute passwd para modificar la contraseña del usuario actual, ¿puede tener éxito?

No, la ruta del archivo del comando passwd es: / usr / bin / passwd, después de que la ruta PATH se establezca en / bin, si ejecuta passwd directamente, no podrá encontrar una ruta que coincida.

3. Cambie el entorno de idioma del sistema actual a chino (si ya es chino, cambie a inglés), y entrará en vigor de forma permanente.

export LANG="zh_CN.UTF-8"

4. Busque archivos de menos de 1k en el sistema y cópielos en / var / tmp / find_dir, y colóquelos en segundo plano para su ejecución.

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

5. Cuente los archivos de cuentas grupales del sistema, ordene su gid, salga al archivo ~ / gid.txt y cuente las líneas de salida

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

6. Utilice sed para modificar directamente el archivo ~ / install.log, modifique todos los archivos x86_64 a i386 y genere un archivo de respaldo

 |sed -i.bak's/x86_64/i386/g' ~/install.log

Supongo que te gusta

Origin blog.csdn.net/weixin_31789689/article/details/107864016
Recomendado
Clasificación