Comandos básicos de expresión regular

   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.


Supongo que te gusta

Origin blog.51cto.com/superleedo/2551502
Recomendado
Clasificación