Aplicaciones básicas de shells (5)
coincide con números, letras y guiones bajos.
egrep "roow" usuario //Busca una cadena que contenga números, letras y guiones bajos después de roo.
s coincide con espacios, teclas de tabulación
egrep "roos" usuario//Encuentra la cadena roo seguida de 1 espacio o el espacio escrito por la tecla de tabulación (si no hay espacio) .
No generar
En segundo lugar, envíe instrucciones adicionales
Agregue C para reemplazar toda la línea agregando I a la línea a.
sed‘a 666‘user //Agrega 666 debajo de todas las líneas.
sed‘1a 666‘user //Agrega 666 debajo de la línea 1.
sed‘/bin/a 666‘user //Agrega 666 debajo de la línea que comienza con bin.
sed‘I 666‘user //Agrega 666 encima de todas las líneas.
sed‘5i 666‘user //Agrega 666 arriba de la quinta línea.
sed '$I 666' usuario //Agrega 666 encima de la última línea 1.
sed‘c 666‘user //Todas las líneas se reemplazan con 666.
sed‘1c 666‘user //Se reemplazó la línea 1 con 666.
-
En tercer lugar, awk
puede lograr búsquedas y resultados precisos, procesamiento línea por línea.
1. Precomando | directiva condicional de opción awk
2. La directiva condicional de opción awk es un documento procesado
La opción -F define el delimitador.
Impresión de instrucciones
Condición/Cadena/
Variable incorporada $1 primera columna $2 segunda columna $3 tercera columna...
$0Todas las columnas NR número de fila NF número de columna
[root @ proxy opt]# cat ABC //Preparar materiales.
Hola mundo
Bienvenido a Beijing
awk "{ print }"ABC txt //Todos los resultados
awk" /to. /{ print }”ABC txt//Emite la línea con to.
awk "{ print $ 2 }" ABC txt // Genera la segunda columna de todas las líneas.
Awk "/to/{ print $ 1 }" abc.txt//Columna 1 de la línea que se generará.
awk "{ print $ 0 }" ABC txt // Genera todas las filas y todas las columnas.
awk "{ print $0, $1}" abc.txt// Genera todas las filas, todas las columnas y 1 columna.
awk "{ print NR }" ABC txt // Muestra los números de línea de todas las líneas.
awk "{print NR,$0}"ABC.txt// Genera los números de línea de todas las líneas y todas las columnas.
awk "{ print NR, NF }" ABC txt // Muestra el número de fila y el número de columna de todas las líneas (hay varias columnas).
awk "/bin/{ printnr }" usuario // encuentra la línea que comienza con bin y muestra el número de línea de esa línea.
awk "/bin/{ print NR, $0}" usuario // encuentra la línea que comienza con bin y muestra
número de línea, todas las columnas
awk "{ print NF }" Usuario // Muestra los números de columna de todas las filas (cuántas columnas hay en cada fila).
awk -F: "{ print $1 }" Usuario // Si no hay espacios en el documento, puedes usar F para modificar la puntuación.
Separador
awk -f: "{ print $1, $6}" Usuario // Utilice dos puntos como separador de las columnas que se mostrarán.
Columnas 1 y 6
awk -f: El directorio de inicio de "{ print $1" es el usuario "$6}" //. También puede generar constantes, con
comillas dobles
awk -f: el intérprete de "{ print $1" es el usuario "$7}".
Recopila la capacidad restante de la partición raíz
Df -h | awk'/$/{ print $ 4 }'//Utiliza DF-H como precomando y mano está listo para procesarse.
Busque la fila que termina con / y genere la cuarta columna.
df-h | awk‘/$/{ print "La capacidad restante de la partición raíz es "$4}'// Luego agregue una salida constante.
Recopilar información sobre el tráfico de la tarjeta de red
ifconfig eth 0 | awk'/rx p/{ print "El número recibido por la tarjeta de red eth 0 es "$5}".
ifconfig eth 0 | awk'/TXP/{ print "El número enviado por la tarjeta de red eth 0 es "$5}".
-
4. Condiciones de awk
1. ¡También puedes usar ~ regular para incluir /string/! ~no contiene
awk-F: "$6 ~/root/{ print }" Usuario // Genera la fila que contiene la raíz en la sexta columna.
awk-F: "$ 6 ~/bin/{ print }" Usuario // Genera la línea con la sexta columna como bin.
awk-F:'$6! ~/bin/{ print } 'Usuario // Genera las filas sin bin en la sexta columna.
2. Utiliza números o cadenas
== != & gt& gt= & lt& lt=
awk-F: "$ 3 & lt; 3. { print } 'Usuario // Muestra las filas donde la tercera columna es menor que 3.
awk-F: "$3<= 3 { print }' Usuario // Muestra las filas donde está la tercera columna es menor o igual a 3. 3 filas.
awk-F: 'NR == 2 { print } 'Usuario // Línea de salida 2.
awk-F: 'NR > 2 { print } 'Usuario // Líneas de salida con un número mayor que 2.
3. Combinación lógica &;& amp y || o
awk-f:'NR = = 2 | Línea número 2 o 4.
awk-f:'NR == 2 | NR == 40 { print }'usuario//Si solo se cumple una condición, se mostrará una.
awk-F:'$ 7 ~/bash/& & amp$ 3 & lt= 500 { print }'user//Encuentra las columnas séptima y tercera que contienen bash.
El número de líneas menor o igual a 500
awk'NR == 2 & amp & ampNR == 4 { print }'user//Encuentra los números de línea 2 y 4 líneas, la línea no existe y no hay salida.
awk-F:'$ 7 ~/bash/& amp; & ampNR & lt= 3 { print }'user//Encuentra el que contiene bash en la columna 7 y tiene números de línea 1~3 .
awk-F:'$ 7 ~/bash/| | NR <= 3 {print }'user//Encuentra el que contiene bash en la columna 7 o en la línea número 1~3.
awk -F: "$1 ~/root/" Usuario // Encuentra la fila que contiene la raíz en la columna 1.
También encontrarás un método de búsqueda más flexible si hay un usuario llamado root6, si
Puedes omitirlo si la tarea es {print}.
awk-F: "$1 == "root"" usuario // Encuentra filas en la columna 1 que sean exactamente iguales a la raíz.
Un carácter más o un carácter menos no funcionará. Este es un método de búsqueda riguroso.
4. Operación
awk 'NR % 2 = = 0 { print NR, $ 0 } 'Usuario // Usar operación en condición.
, encuentre la fila con el resto igual a 0 dividiendo el número de fila por 2 y luego genere
el número de fila y todas las columnas, lo que equivale a generar números pares. filas.
-
Quinto, awk maneja la oportunidad y puede realizar tareas adicionales
Antes de leer el documento, la tarea BEGIN se ejecutó una vez.
La tarea línea por línea se ejecuta n veces, se ejecuta cuando se lee el documento.
La tarea final se ejecutó una vez y se ejecutó después de leer el documento.
Iniciar {Tarea 1}{Tarea 2}Finalizar {Tarea 3}
awk-F:'BEGIN { print "ok"} { print $ 1 } END { print "ok "}'Usuario
awk" Iniciar {Número de impresión} {Número de impresión} Usuario final de {Número de impresión}
Aproveche la oportunidad de procesamiento de awk para generar el siguiente contenido
awk 'begin { print "user uid home"}'//Ingresa la información del encabezado en el paso 1.
awk-f: "{ print $1" "$3" "$6}" user/. Salida en el paso 2.
awk "END { print "Total "NR" line "}" Usuario // Salida del final del paso 3
awk-f:'begin { print. "user uid home" } { print $1" "$3" "$6 } end { print "total" NR "lines"}' usuario // escritos juntos
-
p>Usa awk para contar visitas al sitio web
Setenforce 0 //Cerrar selinux
Systemctl detener el firewall d //Cerrar el firewall
Systemctl reiniciar httpd //. Inicie el servicio del sitio web
Utilice el navegador para acceder al sitio web varias veces, incluido el curl local
curl 192.5438+068 4. 7:82//Si el puerto. cambios, por favor no golpee
awk "{ print $ 1 }'/var/log/httpd/access_log// Estadísticas preliminares, no perfectas.
Sexto, use awk array + for loop para implementar la búsqueda avanzada
Una matriz es equivalente a una variable especial que puede almacenar múltiples valores.
Nombre de la matriz [subíndice] = el valor correspondiente al subíndice.
awk‘BEGIN { a【1】= 10; a【2】= 20; print a【2】, a【1】}‘//Utiliza awk para probar la matriz. Primero,
Cree la matriz A, el valor correspondiente al subíndice 1 es 10, el valor correspondiente al subíndice 2 es 20 y luego genere la suma del subíndice 2.
El subíndice es el valor de 1.
awk'BEGIN { a【"ABC"】="ABC ABC"; a【"XYZ"】="xyzxyz"; imprime el 【"XYZ"】}'//subíndice p >
Ambos valores pueden ser no numéricos, solo agregue comillas dobles al realizar la prueba.
La información anterior se ingresa manualmente pero generalmente se recopila de documentos.
Prepare un archivo de 6 líneas, cada línea es abc, xyz, abc, opq, xyz, abc y luego.
De acuerdo con las características de trabajo del procesamiento línea por línea de awk, use awk'{ a[$ 1]+}'Shu.txt para completar cada línea y obtener los siguientes resultados.
Pero no se muestra en la pantalla.
a【$ 1】++ a【ABC】++ a【ABC】= 1
a【$ 1】++ a【XYZ】++ a【XYZ】 = 1
a[$ 1]++ a[ABC]++ a[ABC]= 2
a[$ 1]++ a[opq]++ a[ opq]= 1
a[$ 1]++ a[XYZ]++ a[XYZ]= 2
a[$ 1]++ a[ABC]++ a【ABC】= 3
Si desea mostrar la salida a la pantalla, puede usar el comando awk "{ a【$ 1】++ } end { print a【ABC】}'Shu . txt .
-
Según las operaciones anteriores, sabemos que la matriz puede recopilar información, pero es inconveniente verla después de la recopilación, por lo que se puede implementar mediante un bucle for:
For (nombre de la variable en el nombre de la matriz) {Imprimir nombre de la variable}//Este formato puede ver todos los subíndices de la matriz
awk "{ a【$ 1】+} End { for (ii en a. ){print I,a[I]}"shu.txt//Utilice matrices y tareas progresivas.
Recopile la información en el documento shu.txt y luego utilice un bucle for para mostrar toda la información en la tarea final
El subíndice y valor de la matriz a
awk "{ IP[$1]++ } END { for (I in IP) {. print I, IP[I]} }'/var/log/httpd/AC
Cess_log //Simplemente reemplace el archivo anterior con el registro del sitio web.
Finalmente, se utiliza para verificar los registros para obtener a qué IP se puede acceder y cuántas veces.
awk "{ IP【$ 1】++ } END { for (I en IP) { print I, IP【I】} }'/var/log/httpd/AC
Cess_log | sort -nr -k 2 //Utilice el comando sort para aumentar la clasificación
En la función, -n ordena en orden numérico, -r ordena en orden descendente y -k se especifica. p>¿Qué columna se ordena?
-
/var/log/secure es un registro de seguridad si alguien ingresa una contraseña incorrecta al iniciar sesión.
La información se registrará y awk puede capturar esta información mediante:
awk "/root/{ IP【$11】++ } END { for (I in IP) { print I, IP【I 】} } Error de contraseña
/var/log/secure //La contraseña ingresada para acceder a la cuenta raíz en el registro de seguridad estadística es incorrecta.
Dirección IP y hora.
-
Escribe un script para ver información diversa de los parámetros del sistema.
#!/bin/bash
También:
Hacer
clear
free-h | '/mem:/{ print "La capacidad de memoria restante es "$4}".
DF-H | awk'/$/{ print "La capacidad restante de la partición raíz es "$4}".
awk‘END { print "El número total de usuarios es "NR""}‘/etc/passwd.
who | awk'END { print "El número de usuarios conectados es "NR" y "}".
uptime | awk "{ print"Carga promedio de CPU en 15 minutos es "$NF}".
rpm-QA | awk "END { print "El número de paquetes instalados es "NR" piezas "}".
Completo