Selección de ejercicios de expresión regular
Directorio de artículos
Parte basica
-
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模式
-
Muestra información sobre usuarios root, centos o user1 en el sistema actual
cat /etc/passwd |grep -E '^(root|centos|user1)\>'//左边开头且右边是同类型字符
-
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:]字母和数字
-
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 "\<[^/]+/?$" //没有以/开头且没有以/结尾的字符串
-
Saque su nombre de ruta, similar al resultado del comando dirname
-
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$"
- 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
-
Busque de forma recursiva el carácter "main {}" en todos los archivos .php y .html del directorio
grep -r "main{}" . --include *.{ php,html}
-
Excluir todos los archivos README de los resultados de búsqueda
grep -r "main{}" . --exclude "README"
-
Excluir archivos de la lista de archivos de los resultados de la búsqueda
grep -r "main{}" . --exclude-from filelist
-
Búsqueda recursiva de texto en directorios de varios niveles
grep -r -n -E '^(#!/bin/bash)' . //. 指的是当前目录路径
-
Busque varios archivos y encuentre en qué archivos está el texto coincidente
grep -n "root" /etc/fstab /etc/shadow /etc/passwd
-
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]" //反向选择
-
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'
-
Filtrar líneas en blanco y líneas que comienzan con #
#cat /etc/fstab|grep -vE '^$|^#'
-
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'
-
Lista de todos los usuarios del sistema del sistema
cat /etc/passwd |awk -F: '$3>=1 && $3 <=1000{print $1}'
-
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
-
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
-
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
-
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$"
-
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
-
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
-
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