El conocimiento básico de la expresión regular se discutió en la sección anterior, y los tres comandos clave de la expresión regular son grep, sed y awk.
1) grep se utiliza para filtrar la información de las filas
Función: buscar e imprimir la línea que coincide con la palabra clave
Parámetros: -n salida de líneas coincidentes y números de línea juntos; -v líneas de impresión que no cumplen con los requisitos (invertidas); -i no distinguen mayúsculas de minúsculas; -w líneas de impresión de palabras completas; -una líneas de impresión que cumplen los requisitos y N líneas inferiores; -Bn imprime las líneas necesarias y las n líneas superiores; -Cn imprime las líneas necesarias y las n líneas superiores e inferiores.
[centos7 the root @ ~] # grep -A2 / the passwd 'halt' / etc # halt la línea que contiene las siguientes dos líneas y genera
[the root centos7 @ ~] # grep -B2 'halt' / etc / passwd # comprende el La línea de detención y las dos líneas de arriba son la salida
[root @ centos7 ~] # grep -C2'halt '/ etc / passwd
#Output la línea que contiene la detención y las dos líneas de arriba y de abajo [root @ centos7 ~] # grep -n 'root' / etc / passwd
#Filtra las líneas con la palabra clave root y los números de línea [root @ centos7 ~] # grep -v'nologin '/ etc / passwd
#Filtra líneas sin nologin [root @ centos7 ~ ] # grep '[0-9]' / etc / inittab
#Filtra todas las líneas que contienen números [root @ centos7 ~] # grep -v '[0-9]' / etc / inittab #Filtra todas las líneas que no contienen números La línea
[root @ centos7 ~] # grep -v '^ #'/ etc / inittab
#Filtra las líneas que comienzan con no # [root @ centos7 ~] # grep'game $ '/ etc / inittab
#Filtra las líneas que terminan con el juego [root @ centos7 ~] # grep -v' ^ # '/ etc / crontab | grep -v '^ $' # Elimina todas las líneas en blanco y las líneas que comienzan con #
2) sed se usa para filtrar y reemplazar el texto de línea
Sed es un editor en línea que procesa el contenido de texto una línea a la vez. Al procesar, almacene la línea actualmente procesada en un búfer temporal, luego use el comando sed para procesar el contenido del búfer y, una vez completado el procesamiento, envíe el contenido del búfer a la pantalla. Luego procese la siguiente línea y repita de esta manera hasta el final del archivo.
Rol: filtrar la consulta y modificar el contenido del texto de reemplazo
Parámetros: -n solo se listará la línea (o acción) que ha sido procesada especialmente por sed; -e editar directamente las acciones de sed en el modo de línea de comando; -f escribir directamente las acciones de sed en un archivo; - La acción de r sed admite la sintaxis de notación regular extendida; -i modifica directamente el contenido del archivo leído sin enviarlo al terminal. se agrega a, después de que a puede ir seguido de cadenas, y estas cadenas aparecerán en una nueva línea (la siguiente línea actual); c reemplazada, después de que c pueda ser seguida por cadenas, estas cadenas pueden reemplazar entre n1 y n2 La línea de d se elimina, porque se elimina, por lo que generalmente no hay contenido después de d; i se inserta y modifica, y las cadenas se pueden conectar después de i, y estas cadenas serán una nueva línea; p se imprime y una determinada selección Salida de datos de s; s reemplazar y reemplazar, reemplazar directamente; g seleccionar todo el contenido.
Eliminar: d command
[root @ centos7 ~] # sed '2d' app.txt #Borrar la segunda línea del archivo
[root @ centos7 ~] # sed '2, $ d' app.txt #Borrar la segunda línea del archivo para Todas las líneas al final
[root @ centos7 ~] # sed '$ d' app.txt #Borrar la última línea del archivo
[root @ centos7 ~] # sed '/ test /' d app.txt #Borrar todas las líneas que contienen prueba y
reemplazo : s comando
[centos7 the root @ ~] # Sed 'S / test / Prod / g' app.txt # file reemplaza todos los prod de prueba, luego no hay reemplazo g cada fila a
[centos7 the root @ ~] # Sed - n's / ^ test / prod / p 'app.txt # La línea que comienza con test, reemplaza test con prod y da como resultado
[root @ centos7 ~] # sed -n's / \ (love \) able / \ 1rs / p 'app.txt #Todos los adorables serán reemplazados por amantes
[root @ centos7 ~] # sed's # tu # tu # g 'app.txt # "#" es el separador aquí, en lugar del predeterminado "/"
Rango de línea seleccionado: coma
[root @ centos7 ~] # sed -n '/ test /, / chart / p' app.txt # muestra todas las líneas en el rango de prueba y cheart
[root @ centos7 ~] # sed -n '6, / ^ test / p' app.txt #Output todas las líneas desde la línea 6 a la línea que comienza con test
[root @ centos7 ~] # sed '/ test /, / chart / s / $ / test /'app.txt #La línea entre test y west, agregue test al final
Edición multipunto: comando e
[root @ centos7 ~] # sed -e '1,5d' -e's / test / dev / 'app.txt # Elimina las líneas 1 a 5 y reemplaza test con dev
Leer desde el archivo: r command
[root @ centos7 ~] # sed '/ test / r 1.txt' app.txt # Coincidir con la línea de prueba, insertar el contenido 1.txt en la línea y enviarlo juntos
Escribir archivo: comando w
[root @ centos7 ~] # sed -n '/ test / w 1.txt' app.txt #Todas las líneas que contienen test en app.txt se escriben en 1.txt
Agregar comando: un comando
[root @ centos7 ~] # sed '/ ^ test / a \\ ---> this is app.txt' app.txt <# El contenido se agrega al final de la línea que comienza con test
Insertar modificación: i command
[root @ centos7 ~] # sed '2i love you' app.txt #Insert love you en la línea 2
[root @ centos7 ~] # sed -i's / \ $ / \! / G ' app.txt #Reemplace el $ al final de la línea con!
3) filtro awk editar texto
Awk es un editor de streaming como sed. También opera en líneas en un documento y procesa texto línea por línea. Awk es más poderoso que sed, puede hacer lo que sed puede hacer y también puede hacer regularidades más complejas.
1 awk formulario de comando
awk [-F | -f | -v] 'BEGIN {} // {comando1; comando2} END {}' archivo
[-F | -f | -v] Parámetro grande, -F especifica el separador, -f llama al script, -v define la variable var = valor
'' bloque de código # cotización
COMENZAR #initialize el bloque de código, se refieren principalmente a las variables globales, establecer el separador de FS
// # coincidencia de bloques de código, que puede ser una cadena o expresión regular
{ } # Bloque de código de comando, que contiene uno o más comandos
; # Varios comandos están separados por punto y coma
END # Bloque de código final, principalmente para el cálculo final o información de resumen de salida
2 Carácter de variable especial
$ 0 # Representa toda la línea actual
$ 1 # El primer campo de cada línea
NF # Variable de cantidad de campo
NR # El número de registro de cada línea, incremento de registro de múltiples archivos
FNR # Similar a NR, el registro de múltiples archivos no aumenta, cada archivo Todos comienzan desde 1
\ t # Carácter de tabulación
\ n # Carácter de nueva línea
FS # Definir el separador cuando BEGIN
RS # Ingrese el separador de registros, el valor predeterminado es el carácter de nueva línea
~ # Coincidencia, no una comparación exacta con ==
! ~ # No coincide , Comparación inexacta
== # Igual, deben ser todos iguales, comparación exacta
! = # No igual, comparación exacta
&& # Lógica Y
|| # Lógica OR
+ # Cuando se empareja, significa 1 o más
/ [0-9] [ 0-9] + / # Dos o más dígitos
/ [0-9] [0-9] * / # Uno o más dígitos
OFS # Separador de campo de salida, el valor predeterminado también es un espacio
ORS # Separador de registro de salida, El valor predeterminado es nueva línea
-F '[: # /]' # Define tres separadores
3 ejemplo de awk
= Etc. Cabe señalar que al comparar números con comillas dobles, awk no lo considerará como un número, sino como un carácter, sin las comillas dobles se considerará como un número. [root @ centos7 ~] #
awk -F ':' '$ 3 == "0"' / etc / passwd
#Combina la línea con el carácter 0 en el tercer campo [root @ centos7 ~] # awk -F ':' '$ 3> = 500' / etc / passwd
# Coincide con la línea donde el tercer campo es mayor que el número 500 [root @ centos7 ~] # awk -F ':' '$ 7! = "/ sbin / nologin"' / etc / passwd # Coincide con el séptimo campo no nologin La línea
[root @ centos7 ~] # awk -F ':' '$ 3 <$ 4' / etc / passwd
# Comparación lógica entre dos segmentos [root @ centos7 ~] # awk -F ':' '$ 3> " 5 "&& $ 3 <" 7 "'/ etc / passwd
#Líneas que satisfacen dos condiciones coincidentes al mismo tiempo [root @ centos7 ~] # awk -F': '' $ 3>" 5 "|| $ 7 ==" / bin / intento"'/ etc / passwd #La línea que cumple una de las condiciones de la
variable
NF de uso común : cuántos párrafos están separados por un separador, cuántos párrafos son NF y $ NF es el valor del último párrafo
NR: número de línea número de línea
[root @ centos7 ~ ] # head -n3 / etc / passwd | awk -F ':' '{imprimir NF}'
#Obtener el número total de párrafos [root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '{print $ NF}'
#Obtener el valor del último párrafo [root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '{print NR}'
# Número de línea de salida [root @ centos7 ~] # awk'NR > 20 '/ etc / passwd
#Utilice la línea número 20 como condición de juicio [root @ centos7 ~] # awk -F ':' 'NR> 20 && $ 1 ~ / ssh /' / etc / passwd # Líneas de salida con NR mayor que 20 y ssh en el primer párrafo
modifican el valor del campo calculado
[root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '$ 1 = "root"'
# El primer párrafo de las primeras tres líneas se modifica a la salida raíz [root @ centos7 ~] # head -n2 / etc / passwd | awk -F ':' ' {$ 7 = $ 3 + $ 4; imprimir $ 7} '
#Calcular campos y asignar valores [root @ centos7 ~] # awk -F ':' '{(t = t + $ 3)}; END {print t}' / etc / passwd # $ 3 recuento de campos y
[root @ centos7 ~] # awk -F ':' '{if ($ 1 == "root") imprime $ 0}' / etc / passwd #output la línea donde $ 1 es root
El contenido de esta sección es básico. Los ejemplos de comandos anteriores pueden satisfacer el uso diario. Si desea funciones más complejas y potentes, puede consultar el sitio web oficial de la herramienta de comando. Especialmente awk, hay libros profesionales que presentan esta herramienta de comando. La familiaridad con los comandos es el requisito previo para escribir scripts. Antes de escribir un script, primero debe comprender los resultados de ejecución de cada comando, cooperar con la declaración del ciclo de juicio y realizar las complejas funciones de procesamiento en lotes.