Menú
Está libre
registrarse
el principal  /  Programas / Expresiones regulares de UNIX. Usando expresiones regulares (REGEX) en Linux

Expresiones regulares UNIX. Usando expresiones regulares (REGEX) en Linux

Original: Linux Fundamentals
Publicado por: Paul Cobbaut
Fecha de publicación: 16 de octubre de 2014
Traducción: A.panin
Fecha de traducción: 17 de diciembre de 2014

Capítulo 19. Expresiones regulares.

El mecanismo de las expresiones regulares es una herramienta de Linux muy poderosa. Expresiones regulares Se puede usar cuando se trabaja con una variedad de programas, como Bash, VI, Cambiar nombre, GREP, SED y otros.

Este capítulo presenta información básica sobre expresiones regulares.

Versiones de sintaxis de expresión regular

Hay tres versiones diferentes de expresiones regulares: expresiones regulares básicas (sintaxis básica de expresiones regulares) Eree: Expresiones regulares extendidas (Sintaxis avanzada de expresiones regulares) PCRE: Perl Expresiones regulares (Sintaxis de expresiones regulares del lenguaje de programación Perl)

Dependiendo de la herramienta utilizada, se pueden usar una o más especificaciones mencionadas.

Por ejemplo, la herramienta GREP es compatible con un parámetro -e, que le permite usar la sintaxis de expresiones regulares extendidas (ERE) cuando se analiza una expresión regular, que en el momento en que el parámetro -g permite forzarse a usar la sintaxis básica de Expresiones regulares (BRE), y el parámetro -p: la sintaxis de las expresiones regulares del lenguaje de programación Perl (PCRE).

Teniendo en cuenta el hecho de que la herramienta GREP también admite el parámetro -F que le permite leer una expresión regular sin procesamiento.

La herramienta SED también admite los parámetros para seleccionar la sintaxis de expresiones regulares.

¡Siempre lee las directrices de los instrumentos utilizados!

Utilidad grep.

Conclusión de cuerdas que coinciden con la plantilla.

La utilidad GREP es una herramienta popular de Linux diseñada para buscar líneas que coinciden con una plantilla específica. A continuación se muestran ejemplos de las expresiones regulares más simples que se pueden usar cuando se trabaja con él.

Este es el contenido del archivo de prueba utilizado en los ejemplos. Este archivo contiene tres líneas (o tres símbolos de la nueva línea). [Correo electrónico protegido]: ~ $ CAT nombres Tania Laura Valentina

Al buscar un carácter separado, solo se mostrarán las líneas que contienen un símbolo específico. [Correo electrónico protegido]: ~ $ Grep u nombres laura [Correo electrónico protegido]: ~ $ Grep e nombres valentina [Correo electrónico protegido]: ~ $ Grep nombres Tania Valentina

Una comparación con la plantilla utilizada en este ejemplo es obvia; En el caso de que el símbolo especificado se encuentre en la cadena, la utilidad GREP mostrará esta cadena.

Combinando símbolos

Para buscar combinaciones de caracteres en líneas, los símbolos de la expresión regular deben combinarse de la misma manera.

Este ejemplo demuestra el principio de funcionamiento de la utilidad GREP, según la cual la expresión regular IA corresponderá a la cadena TAN IA, pero no la cadena VA LENT I NA, y la expresión regular en la línea valent en una línea, pero no la Ta ni a. [Correo electrónico protegido]: ~ $ Grep a nombres Tania Laura Valentina [Correo electrónico protegido]: ~ $ GREP IA nombres Tania [Correo electrónico protegido]: ~ $ Grep en nombres valentina [Correo electrónico protegido]:~$

Uno u otro símbolo

Tanto en la sintaxis PCRE como en la ERE Sintaxis, se puede usar un símbolo de la creación de un canal de software, que en este caso enviará una operación lógica "o". En este ejemplo, buscaremos con las utilidades GREP de las cadenas en las que se encuentra el carácter I o un símbolo a. [Correo electrónico protegido]: ~ $ Cat List Tania Laura [Correo electrónico protegido]: ~ $ GREP -E "I | A" A LISTA TANIA LAURA

Tenga en cuenta que usamos el parámetro -e utilidades GREP para la interpretación forzada de nuestra expresión regular como una expresión utilizando la sintaxis regular de las expresiones regulares (ERE).

Tendremos que proteger un símbolo para crear un canal de software en una expresión regular utilizando la sintaxis básica de expresiones regulares (BRE) para una interpretación similar de este carácter como una operación lógica "o". [Correo electrónico protegido]: ~ $ GREP -G "I | A" LISTA [Correo electrónico protegido]: ~ $ GREP -G "I \\ | A" Lista de Tania Laura

Una o más coincidencias

El símbolo * corresponde a cero, una o más entradas del símbolo anterior, y el símbolo de caracteres posterior +. [Correo electrónico protegido]: ~ $ Gato list2 ll lol lool loool [Correo electrónico protegido]: ~ $ GREP -E "O *" List2 LL LOL Lool Lool [Correo electrónico protegido]: ~ $ GREP -E "O +" List2 LOL Lool Lool [Correo electrónico protegido]:~$

Coincidencia al final de la cuerda

En los siguientes ejemplos, usaremos este archivo: [Correo electrónico protegido]: ~ $ Nombres de gatos Tania Laura Valentina Fleur Floor

En dos ejemplos, el siguiente es el método de uso de un símbolo de dólar para buscar una coincidencia al final de la línea. [Correo electrónico protegido]: ~ $ Grep a $ nombres Tania Laura Valentina [Correo electrónico protegido]: ~ $ Grep r $ nombres Fleur Floor

Coincidencia al comienzo de la línea

El símbolo de inserción (^) le permite buscar la coincidencia al principio (o de los primeros caracteres) cadenas.

En estos ejemplos, se usa el archivo considerado anteriormente. [Correo electrónico protegido]: ~ $ Grep ^ val nombres valentina [Correo electrónico protegido]: ~ $ Grep ^ f nombres Fleur Floor

Los símbolos del dólar y los inserciones utilizados en expresiones regulares se denominan anclajes (anclajes).

Separación de palabras

El blindaje de palabras deseadas que usan los símbolos de la brecha no es una buena solución (ya que otros caracteres también se pueden usar como separadores de palabras). En el siguiente ejemplo, muestra el método de uso de una secuencia de caracteres \\ b para buscar filas con una palabra dada, no una secuencia de caracteres: [Correo electrónico protegido]: ~ $ GREP "\\ BOVER \\ B" Texto el invierno ha terminado. ¿Puedes llegar allí? [Correo electrónico protegido]:~$

Tenga en cuenta que la utilidad GREP también admite el parámetro -W diseñado para buscar la búsqueda. [Correo electrónico protegido]: ~ $ Texto CAT El gobierno está gobernando. El invierno ha terminado. ¿Puedes llegar allí? [Correo electrónico protegido]: ~ $ Grep -w sobre texto El invierno ha terminado. ¿Puedes llegar allí? [Correo electrónico protegido]:~$

Configuración Utilidades GREP.

A veces, resulta ser más fácil de combinar una expresión regular simple con los parámetros de la utilidad GREP, en lugar de crear una expresión regular más compleja. Estos parámetros se discutieron anteriormente: GREP -I GREP -V GREP -W GREP -A5 GREP -B5 GREP -C5

Prevención de la divulgación de la expresión regular por el comando Shell

El símbolo del dólar es un símbolo especial de ambos para la expresión regular y para el shell de comandos (recuerde las variables de comando shell y los shells de comando incrustados). Sobre la base de esto, se recomienda proteger expresiones regulares en cualquier circunstancia, ya que la selección de una expresión regular le permite prevenir la divulgación de esta expresión por el Shell de comandos. [Correo electrónico protegido]: ~ $ GREP "R $" Nombres Fleur Floor Cambiar el nombre

Cambiar nombre de utilidad.

Implementación de la utilidad de cambio de nombre.

En la distribución de Debain Linux, la ruta / usr / bin / cambename es un enlace al escenario / usr / bin / prename, instalado desde el paquete Perl. [Correo electrónico protegido] ~ $ Dpkg -s $ (Readlink -F $ (que renombra) Perl: / usr / bin / preneame

En las distribuciones basadas en la distribución de Red Hat, no se crea una referencia simbólica similar para especificar el script descrito (por supuesto, con la excepción de los casos cuando se crea un enlace simbólico al script establecido manualmente), por lo que esta sección no describirá La utilidad de cambio de nombre desde la distribución de sombrero rojo.

En las discusiones sobre la utilidad de cambio de nombre en Internet, generalmente ocurre confusión debido al hecho de que las decisiones que trabajan perfectamente en la distribución de Debian (así como Ubuntu, Xubuntu, Mint, ...) no se pueden usar en la distribución de Red Hat (como así como Centlos, Fedora, ...).

Paquete Perl

De hecho, el comando Cename se implementa en forma de script utilizando lenguajes de programación regulares de Perl. Con el manual completo para usar este script, puede leer después de ingresar al comando perldoc perlrequick (después de instalar el paquete perldoc). [Correo electrónico protegido]: ~ #ptitud Instale PERL-DOC Los siguientes paquetes nuevos se instalarán: Perl-Doc 0 paquetes actualizados, 1 instalado Nuevo, se anotan 0 paquetes para eliminar, y 0 paquetes no se actualizan. Es necesario obtener 8,170 kb Archivos. Después de desempacar, se ocuparán 13.2 MB. Obtenga: 1 http://mirrordirector.raspbian.org/raspbian/ wheeezy / principal perl-do ... 8,170 kb en 19c (412 kb / s) Seleccione un paquete PERL-DOC previamente seleccionado. (Leyendo la base de datos ... en este momento 67121 Se instalan archivos y directorios.) Perl-Doc (de ... / perl-doc_5.14.2-21 + rpi2_all.deb) ... Agregar "Divesion of / usr / bin / perldoc to / usr / bin / perldoc. Study por PERL-DOC "Disparadores procesados \u200b\u200bpara MAN-DB ... El paquete PERL-DOC está configurado (5.14.2-21 + RPI2) ... [Correo electrónico protegido]: ~ # Perldoc perlrequick

Sintaxis bien conocida

La mayoría de las veces, la utilidad Cambiar nombre se utiliza para buscar archivos con nombres correspondientes a una plantilla específica en forma de una cadena, y reemplazar esta cadena a otra línea.

Normalmente, esta acción se describe utilizando una expresión regular S / STRING / OTRE LINE /, como se muestra en el ejemplo: [Correo electrónico protegido] ~ $ Ls abc allfiles.txt bllfiles.txt scratch tennis2.txt abc.conf backup cllfiles.txt temp.txt tennis.txt [Correo electrónico protegido] ~ $ Cambiar nombre "S / TXT / Texto /" * [Correo electrónico protegido] ~ $ Ls abc allfiles.text bllfiles.text scratch tennis2.text abc.conf backup cllfiles.text temp.Text Tennis.Text

Y a continuación, se encuentra otro ejemplo, que utiliza la sintaxis conocida de la utilidad Cambiar nombre para cambiar repetidamente las extensiones de los mismos archivos: [Correo electrónico protegido] ~ $ Ls abc allfiles.text bllfiles.text scratch tennis2.text abc.conf backup cllfiles.text temp.Text Tennis.Text [Correo electrónico protegido] ~ $ Cambiar nombre "S / Text / TXT /" * .Text [Correo electrónico protegido] ~ $ Ls abc allfiles.txt bllfiles.txt scratch tennis2.txt abc.conf backup cllfiles.txt temp.txt tennis.txt [Correo electrónico protegido] ~ $

Estos dos ejemplos son viables por la razón por la que las cadenas que utilizamos se encuentran exclusivamente en extensiones de archivos. No olvide que las extensiones de archivo no importan cuando se trabaja con el comando Bash Shell.

El siguiente ejemplo demuestra el problema con el que puede encontrar al usar esta sintaxis. [Correo electrónico protegido] ~ $ Touch atxt.txt [Correo electrónico protegido] ~ $ Nombre de nombre "s / txt / problema /" atxt.txt [Correo electrónico protegido] ~ $ Ls abc allfiles.txt backup cllfiles.txt temp.txt tennis.txt abc.conf aproblem.txt bllfiles.txt scratch tennis2.txt [Correo electrónico protegido] ~ $

Al ejecutar el comando en consideración, se realiza un reemplazo de excepcionalmente la primera entrada de la cadena deseada.

Reemplazo global

La sintaxis utilizada en el ejemplo anterior se puede describir de la siguiente manera: S / Expresión / cadena de reemplazo /. Esta descripción es simple y obvia, ya que solo tiene que colocar una expresión regular entre las dos primeras barras y una fila para reemplazar entre las dos últimas liquidaciones.

En el siguiente ejemplo, esta sintaxis se expande ligeramente debido a la adición del modificador. [Correo electrónico protegido] ~ $ Nombre-nombre "s / txt / txt / g" atxt.txt atxt.txt, renombrado como Atxt.txt [Correo electrónico protegido] ~ $

Ahora, la sintaxis que utilizamos se puede describir como S / EXPRESIÓN / CANTALIZACIÓN REGULAR para reemplazar / G, donde el modificador S es una operación de reemplazo (interruptor), y el modificador G informa la necesidad de implementar reemplazo global (Global).

Tenga en cuenta que en este ejemplo, se usó el parámetro -N para mostrar información sobre la operación que se realiza (en lugar de realizar la operación en sí, que consiste en renovar directamente el archivo).

Reemplazo sin registrarse

Otro modificador que puede ser útil es un modificador I. El siguiente ejemplo muestra el método de reemplazo de la cadena a otra línea sin registrar el registro. [Correo electrónico protegido]: ~ / Archivos $ LS File1.Text File2.Text File3.txt [Correo electrónico protegido]: ~ / Archivos $ Cambiar nombre "S / .Text / .txt / i" * [Correo electrónico protegido]: ~ / Archivos $ ls file1.txt file2.txt file3.txt [Correo electrónico protegido]: ~ / Archivos $

Cambiando extensiones

Interfaz de equipo cuerdas de Linux No existe idea de las extensiones de archivo similares a la MS-DOS aplicable en el sistema operativo, pero muchos usuarios y aplicaciones con una interfaz gráfica usanlos.

Esta sección proporciona un ejemplo de uso de la utilidad Cambiar nombre para cambiar las extensiones de archivo exclusivamente. El ejemplo utiliza el símbolo del dólar para indicar que el punto de referencia para el reemplazo es el final del nombre del archivo. [Correo electrónico protegido] ~ $ LS * .TXT ALLFILES.TXT BLLFILES.TXT CLLFILES.TXT REALMENTE.TXT.TXT TEMP.TXT Tennis.txt [Correo electrónico protegido] ~ $ Cambiar nombre "S / .txt $ /. TXT /" * .txt [Correo electrónico protegido] ~ $ LS * .TXT ALLFILES.TXT BLLFILES.TXT CLLFILES.TXT REALMENTE.TXT.TXT TEMP.TXT Tennis.txt [Correo electrónico protegido] ~ $

Tenga en cuenta que el símbolo del dólar dentro de la expresión regular indica el final de la línea. Sin el símbolo del dólar, la ejecución de este comando debe completarse en el momento de procesar el nombre del archivo realmente.txt.txt.

Utilidad

Editor de flujo de datos

El Editor de flujo de datos (Editor de flujo) o, para Brevity, la utilidad SED utiliza expresiones regulares para modificar el flujo de datos.

En este ejemplo, la utilidad SED se utiliza para reemplazar la cadena. Echo lunes | SED "S / MONON / SEC /" MARTES

La barra puede ser reemplazada por algunos otros personajes que pueden ser más convenientes y mejorados de lectura del equipo en algunos casos. Echo lunes | SED "S: Lunes: Segundo:" Martes Echo Lunes | Sed "s_- region_vtor_" martes eco lunes | Sed "s | lunes | rata |" martes

Editor interactivo

A pesar de que la utilidad SED está diseñada para manejar los flujos de datos, también se puede utilizar para el procesamiento de archivos interactivo. [Correo electrónico protegido]: ~ / Archivos $ echo lunes\u003e hoy [Correo electrónico protegido]: ~ / Archivos $ gato hoy lunes [Correo electrónico protegido]: ~ / Archivos $ sed -i "s / lunes / dev /" hoy [Correo electrónico protegido]: ~ / Archivos $ gato hoy el martes

El símbolo de Ampersand se puede utilizar para referirse a la cadena deseada (y encontrada).

En este ejemplo, Ampersand se utiliza para duplicar el número de líneas encontradas. Echo lunes | SED "S / Monda / && /" LUNES ECHO LUNES | Sed "s / nik / && /" lunes

Los soportes redondos se utilizan para agrupar partes de una expresión regular, que pueden instalarse enlaces posteriormente.

Considere el siguiente ejemplo: [Correo electrónico protegido]: ~ $ Echo el domingo | Sed "s _ \\ (sol \\) _ \\ 1ny_" sunnyday [Correo electrónico protegido]: ~ $ Echo el domingo | Sed "s _ \\ (sol \\) _ \\ 1ny \\ 1_" Sunny Sunday

Punto para denotar cualquier símbolo.

En la expresión regular, un simple símbolo de punto puede designar cualquier carácter. [Correo electrónico protegido]: ~ $ Echo 2014-04-01 | sed "s /....-..-../ yyyy-mm-dd /" yyyy-mm-dd [Correo electrónico protegido]: ~ $ Echo ABCD-EF-GH | sed "s /....-..-../ yyyy-mm-dd /" yyyy-mm-dd

En el caso de más de un par de soportes redondos, la referencia a cada uno de ellos se puede realizar utilizando valores numéricos consecutivos. [Correo electrónico protegido]: ~ $ Echo 2014-04-01 | Sed "s / \\ (.... \\) - \\ (.. \\) - \\ (.. \\) / \\ 1+ \\ 2+ \\ 3 /" 2014 + 04 + 01 [Correo electrónico protegido]: ~ $ Echo 2014-04-01 | Sed "s / \\ (.... \\) - \\ (.. \\) - \\ (.. \\) / \\ 3: \\ 2: \\ 1 /" 01: 04: 2014

Esta característica se llama agrupación.

Espacio

La secuencia del símbolo se puede usar para referirse a un símbolo de este tipo como un símbolo de espacio o pestaña.

Este ejemplo proporciona secuencias de secuencias globales de los símbolos de separación (\\ s), que son reemplazados por 1 nave espacial. [Correo electrónico protegido]: ~ $ echo -e "Hoy \\ title \\ td" hoy es un día cálido [Correo electrónico protegido]: ~ $ echo -e "Hoy \\ Trade \\ TDN" | sed "s_ \\ s_ _g" hoy un día cálido

Entradas opcionales

El símbolo del signo de interrogación indica que el símbolo anterior es opcional.

En el siguiente ejemplo, se busca una secuencia de tres caracteres O, y el tercer carácter O es opcional. [Correo electrónico protegido]: ~ $ Gato list2 ll lol lool loool [Correo electrónico protegido]: ~ $ Grep -e "ooo?" List2 Lool Lool. [Correo electrónico protegido]: ~ $ CAT LIST2 | Sed "s / ooo \\? / A /" ll lol lal lal

Exactamente n repeticiones

Puede especificar el número exacto de repeticiones del símbolo anterior.

Este ejemplo está buscando filas con exactamente tres símbolos O. [Correo electrónico protegido]: ~ $ Gato list2 ll lol lool loool [Correo electrónico protegido]: ~ $ GREP -E "O (3)" List2 Loool [Correo electrónico protegido]: ~ $ CAT LIST2 | Sed "s / o \\ (3 \\) / a /" ll lol lal lal [Correo electrónico protegido]:~$

De n a m repetición

Y en este ejemplo, indicamos claramente que el símbolo debe repetirse desde el mínimo (2) hasta el número máximo (3). [Correo electrónico protegido]: ~ $ Gato list2 ll lol lool loool [Correo electrónico protegido]: ~ $ GREP -E "O (2.3)" List2 Lool Lool [Correo electrónico protegido]: ~ $ GREP "O \\ (2.3 \\)" List2 Lool Lool [Correo electrónico protegido]: ~ $ CAT LIST2 | Sed "s / o \\ (2.3 \\) / a /" ll lol lal lal [Correo electrónico protegido]:~$

Bash Command Shell History

El Shell Command Bash también puede interpretar algunas expresiones regulares.

Este ejemplo muestra una técnica de manipulación con una marca de exclamación como parte de una máscara de búsqueda en la historia del shell de comandos de bash. [Correo electrónico protegido]: ~ $ Mkdir hist [Correo electrónico protegido]: ~ $ CD HIST / [Correo electrónico protegido]: ~ / Hist $ touch file1 file2 file3 [Correo electrónico protegido]: ~ / HIST $ LS -L File1 -RW-R - R-- 1 Paul Paul 0 abr 15 22:07 File1 [Correo electrónico protegido]: ~ / HIST $! L LS -L File1 -RW-R - R-- 1 Paul Paul 0 abr 15 22:07 File1 [Correo electrónico protegido]: ~ / HIST $! L: S / 1/3 LS -L File3 -RW-R - R-- 1 Paul Paul 0 abr 15 22:07 File3 [Correo electrónico protegido]: ~ / HIST $

Esta técnica también funciona en el caso del uso de números al leer la historia del comando SHELL SHELL. [Correo electrónico protegido]: ~ / Hist $ Historia 6 2089 MKDIR HIST 2090 CD HIST / 2091 TOUCH FILE1 FILE2 FILE3 2092 LS -L File1 2093 LS -L File3 2094 History 6 [Correo electrónico protegido]: ~ / HIST $! 2092 LS -L File1 -RW-R - R-- 1 Paul Paul 0 abr 15 22:07 File1 [Correo electrónico protegido]: ~ / HIST $! 2092: S / 1/2 LS -L File2 -RW-R - R-- 1 Paul Paul 0 abr 15 22:07 File2 [Correo electrónico protegido]: ~ / HIST $

Para procesar completamente los textos en Bash-Scripts utilizando SED y AWK, simplemente es necesario lidiar con las expresiones regulares. La implementación de esta herramienta útil se puede encontrar literalmente en todas partes, y aunque todas las expresiones regulares se usan, según las mismas ideas, el trabajo con ellos tiene ciertas características en diferentes entornos. Aquí hablaremos sobre expresiones regulares que son adecuadas para su uso en escenarios. línea de comando Linux.

Este material se concibe como una introducción a expresiones regulares, diseñadas para aquellos que no saben absolutamente qué es. Por lo tanto, comienza desde el principio.

¿Qué son las expresiones regulares?

Para muchos, cuando vean expresiones regulares, la idea surge de inmediato que no hay un juramento sin sentido de los personajes. Pero esto, por supuesto, está lejos. Echa un vistazo, por ejemplo, en esta expresión regular.


En nuestra opinión, incluso un principiante absoluto entenderá inmediatamente cómo funciona y por qué es necesario :) Si no lo entiende, simplemente lea más y todo se enoja en su lugar.
La expresión regular es una plantilla que utiliza los programas como los textos de filtro SED o AWK. En plantillas, los caracteres ASCII convencionales que se representan a sí mismos, y los llamados Metasimlists, que desempeñan un papel especial, por ejemplo, lo que le permite referirse a algunos grupos de personajes.

Tipos de expresiones regulares.

La implementación de expresiones regulares en diversos entornos, por ejemplo, en lenguajes de programación como Java, Perl y Python, en las herramientas de Linux como SED, AWK y GREP, tienen ciertas características. Estas características dependen de los llamados motores de procesamiento del motor, que se dedican a la interpretación de las plantillas.
Linux tiene dos motores de expresión regular:
  • El motor que soporta el estándar POSIX básico de expresión regular (BRE).
  • El motor que soporta el estándar POSIX extendido Expresión regular (ARE).
La mayoría de las utilidades de Linux corresponden a al menos el POSIX BRE estándar, pero algunas utilidades (entre ellas - SED) entienden solo un cierto subconjunto del estándar BRE. Una de las razones de tal restricción es el deseo de hacer que tales utilidades lo más rápido sea posible en el procesamiento de texto.

El estándar Posix Ere se implementa a menudo en lenguajes de programación. Le permite utilizar una gran cantidad de fondos al desarrollar expresiones regulares. Por ejemplo, puede ser secuencias de caracteres especiales para patrones de uso frecuente, como la búsqueda en el texto. palabras separadas o conjuntos de dígitos. AWK apoya el extremo estándar.

Hay muchas maneras de desarrollar expresiones regulares dependiendo de la opinión del programador, y en las características del motor, que es creado por ellos. No es fácil escribir expresiones regulares universales que pueden entender cualquier motor. Por lo tanto, nos centraremos en las expresiones regulares más utilizadas y consideraremos las características de su implementación para SED y AWK.

Expresiones regulares Posix BRE

Quizás la plantilla BRE SIMPLEST es una expresión regular para buscar una secuencia precisa de símbolos en el texto. Aquí está lo que se ve la búsqueda de la cadena en SED y AWK:

$ Echo "Esta es una prueba" | SED -N "/ TEST / P" $ ECHO "Esta es una prueba" | AWK "/ prueba / (Imprimir $ 0)"

Buscar texto por plantilla en sed


Búsqueda de texto por plantilla en AWK

Se puede observar que la búsqueda de una plantilla específica se realiza sin tener en cuenta la ubicación exacta del texto en la cadena. Además, el número de ocurrencias no importa. Después de que la expresión regular encuentre el texto especificado en cualquier lugar de la cadena, la cadena se considera adecuada y transmitida para su procesamiento adicional.

Se debe tener en cuenta las expresiones regulares que son sensibles al registro de caracteres:

$ Echo "Esta es una prueba" | AWK "/ TEST / (Imprimir $ 0)" $ echo "Esta es una prueba" | AWK "/ prueba / (Imprimir $ 0)"

Las expresiones regulares son sensibles al registro.

La primera expresión regular de las coincidencias no encontró, ya que la palabra "prueba", comenzando con la letra mayúscula, no se produce en el texto. El segundo, configurado para buscar la palabra escrita por mayúsculas, encontró una cadena adecuada en el flujo.

En expresiones regulares, es posible no solo letras, sino también espacios, y números:

$ Echo "Esta es una prueba 2 otra vez" | AWK "/ Prueba 2 / (Imprimir $ 0)"

Buscar un fragmento de texto que contiene espacios y números

Los espacios son percibidos por el motor de expresiones regulares como caracteres ordinarios.

Símbolos especiales

Al usar varios símbolos en expresiones regulares, se deben tener en cuenta algunas características. Por lo tanto, hay algunos símbolos especiales, o metacaracteres, el uso de los cuales en la plantilla requiere un enfoque especial. Aquí están:

.*^${}\+?|()
Si se necesita uno de ellos en la plantilla, deberá protegerse utilizando una trenza inversa (slash inversa) - \\.

Por ejemplo, si el texto necesita encontrar un signo de dólar, debe estar encendido en la plantilla, después del símbolo de detección. Diga, hay un archivo MyFile con dicho texto:

Hay $ 10 en mi bolsillo
El signo de dólar se puede detectar utilizando tal plantilla:

$ AWK "/ \\ $ / (Imprimir $ 0)" MyFile

Uso en una plantilla de símbolo especial.

Además, la línea de hundimiento inversa también es un símbolo especial, por lo que si necesita usarlo en la plantilla, también tendrá que protegerse. Parece dos barra, vamos uno al otro:

$ Echo "es un personaje especial" | AWK "/ \\\\ / (Imprimir $ 0)"

Blindaje de barra inversa

Aunque la barra directa no se incluye en la lista de caracteres especiales anteriores, un intento de usarlos en una expresión regular escrita para SED o AWK resultará en un error:

$ Echo "3/2" | AWK "/// Imprimir $ 0)"

Uso incorrecto de la barra directa en la plantilla.

Si es necesario, también debe protegerse:

$ Echo "3/2" | AWK "/ \\ // (Imprimir $ 0)"

Blindaje de barras directas

Símbolos de ancla

Hay dos caracteres especiales para unir la plantilla al principio o al final de la cadena de texto. El símbolo "cubierta": ^ le permite describir las secuencias de los caracteres que están al comienzo de las cadenas de texto. Si el patrón deseado está en otro lugar de la cadena, la expresión regular no le responde. Parece este símbolo como este:

$ Echo "Bienvenido a la página web de LaveeGeeks" | AWK "/ ^ de parámenes / (Imprimir $ 0)" $ echo "Sitio web de LaveEgeeks" | AWK "/ ^ de parámenes / (Imprimir $ 0)"

Búsqueda de plantillas al principio de la línea.

El símbolo ^ está diseñado para buscar una plantilla al principio de la línea, mientras que el registro de caracteres también se tiene en cuenta. Veamos cómo esto afectará el procesamiento. archivo de texto:

$ AWK "/ ^ esto / (Imprimir $ 0)" MyFile


Búsqueda de plantillas al principio de la línea en el texto del archivo.

Cuando se usa SED, si coloca la tapa en cualquier lugar dentro de la plantilla, se percibirá como cualquier otro símbolo convencional:

$ Echo "Esta ^ es una prueba" | Sed -n "/ s ^ / p"

La portada que no está al comienzo de la plantilla en SED.

En AWK, cuando se usa la misma plantilla, este personaje debe estar protegido:

$ Echo "Esta ^ es una prueba" | AWK "/ S \\ ^ / (Imprimir $ 0)"

La cubierta que no está al comienzo de la plantilla en AWK.

Con la búsqueda de fragmentos de texto, descubrimos al principio de la línea. ¿Qué pasa si necesita encontrar algo ubicado al final de la línea?

Esto nos ayudará a un signo de dólar: $, que es un símbolo de extremo de cadena de anclaje:

$ Echo "Esta es una prueba" | AWK "/ prueba $ / (Imprimir $ 0)"

Búsqueda de texto al final de la cadena.

En la misma plantilla puede usar ambos símbolos de anclaje. Realizaremos el procesamiento del archivo MyFile, cuyos contenidos se muestran en la siguiente figura, utilizando una expresión regular de este tipo:

$ AWK "/ ^ Esta es una prueba $ / (Imprimir $ 0)" MyFile


Plantilla en la que se utilizan símbolos de inicio y extremo especiales.

Como se puede ver, la plantilla se hizo reaccionar solo en una cadena completamente apropiada secuencia especificada Los personajes y su ubicación.

Así es como, usando los símbolos de anclaje, filtre las líneas vacías:

$ AWK "! / ^ $ / (Imprimir $ 0)" MyFile
En esta plantilla usó un símbolo de negar, una signa de exclamación -! . A través del uso de tal plantilla, hay una búsqueda de líneas que no contienen nada entre el principio y el final de la línea, y signo de exclamación Solo se muestran las líneas que no corresponden a esta plantilla.

Símbolo "punto"

El punto se utiliza para buscar cualquier símbolo único, con la excepción del símbolo de traducción de la fila. Permítanos dar un archivo de MyFile de este tipo regular, cuyo contenido se muestra a continuación:

$ AWK "/.st/(Print $ 0)" MyFile


Usando un punto en expresiones regulares

Como se puede ver de acuerdo con los datos mostrados, la plantilla corresponde solo a las dos primeras líneas del archivo, ya que contienen una secuencia de caracteres "ST", pretendido por otro símbolo, mientras que la tercera línea de la secuencia apropiada no contiene , y en el cuarto es, pero está en el comienzo de la línea.

Clases de símbolos

El punto corresponde a cualquier símbolo único, pero ¿qué sucede si necesita limitar más flexiblemente el conjunto de caracteres deseados? En tal situación, puedes usar las clases de caracteres.

Gracias a este enfoque, puede organizar la búsqueda de cualquier carácter del conjunto especificado. Se utilizan corchetes para describir la clase de caracteres de caracteres:

$ AWK "/ TH / (Imprimir $ 0)" MyFile


Descripción de la clase de caracteres en términos regulares.

Aquí estamos buscando la secuencia de los personajes "th", delante de los cuales hay un símbolo "O" o el símbolo "I".

Las clases resultan ser muy acogedoras si se realizan la búsqueda de palabras que pueden comenzar tanto de la capital como las letras minúsculas:

$ Echo "Esta es una prueba" | AWK "/ su es una prueba / (Imprimir $ 0)" $ echo "Esta es una prueba" | Awk "/ su es una prueba / (Imprimir $ 0)"

Encontrar palabras que puedan comenzar con una letra minúscula o mayúscula.

Las clases de caracteres no se limitan a las letras. Aquí puedes usar otros personajes. Es imposible decir de antemano, en qué clases de situación necesitarán, todo depende de la tarea que se resuelva.

Negación de clases de símbolos.

Las clases de caracteres también se pueden usar para resolver la tarea inversamente descrita anteriormente. A saber, en lugar de encontrar los personajes incluidos en el aula, puede organizar la búsqueda de todo lo que no está incluido en la clase. Para lograr dicho comportamiento de una expresión regular, antes de la lista de caracteres de clase, debe colocar un signo ^. Se parece a esto:

$ AWK "/ [^ OI] TH / (Imprimir $ 0)" MyFile


Búsqueda de símbolos no incluidos en la clase.

En este caso, se encontrarán las secuencias de los caracteres "th", antes que no hay "O", ni "i".

Bandas de símbolos

En clases simbólicas, puede describir los rangos de caracteres que usan un guión:

$ AWK "/ ST / (Imprimir $ 0)" MyFile


Descripción del rango de símbolos en la clase simbólica.

En este ejemplo, la expresión regular responde a la secuencia de símbolos "ST", delante de los cuales hay algún símbolo ubicado, en orden alfabético, entre los caracteres "E" y "P".

Los rangos se pueden crear a partir de números:

$ Echo "123" | AWK "//" $ echo "12a" | AWK "//"

Expresión regular para buscar tres números.

La clase de símbolos puede incluir varios rangos:

$ AWK "/ ST / (Imprimir $ 0)" MyFile


Clase de símbolos que consta de varios rangos.

Esta expresión regular encontrará todas las secuencias "ST", delante de las cuales hay símbolos de las bandas A-F y M-Z.

Clases especiales de símbolos.

BRE tiene clases de personajes especiales que se pueden usar al escribir expresiones regulares:
  • [[: Alfa:]]: corresponde a cualquier símbolo alfabético registrado en el registro superior o inferior.
  • [[: Alnum:]]: corresponde a cualquier símbolo alfanumérico, a saber, los símbolos en los rangos 0-9, A-Z, A-Z.
  • [[: En blanco:]]: corresponde a la brecha y la pestaña de la pestaña.
  • [[: Dígito:]] - Cualquier símbolo digital de 0 a 9.
  • [[: Superior:]] - Caracteres alfabéticos en la caja superior - A-Z.
  • [[: Baje:]] - Caracteres alfabéticos en la minúscula - A-Z.
  • [[: Impresión:]] - corresponde a cualquier símbolo impreso.
  • [[: PUNT:]] - Corresponde a los signos de puntuación.
  • [[: Espacio:]] - Caracteres ciegos, en particular - espacio, señal de tabulación, símbolos NL, FF, VT, Cr.
Use clases especiales en plantillas como esta:

$ Echo "abc" | AWK "/ [[: Alpha:]] / (Imprimir $ 0)" $ echo "abc" | AWK "/ [[: DIGIT:]] / (Imprimir $ 0)" $ echo "ABC123" | AWK "/ [[: DIGIT:]] / (Imprimir $ 0)"


Clases especiales de símbolos en expresiones regulares.

Símbolo "estrella"

Si en la plantilla después del símbolo, coloque la estrella, esto significará que la expresión regular funcionará si el símbolo aparece en la línea cualquier número de veces, incluida la situación cuando falta el carácter en la línea.

$ Echo "prueba" | AWK "/ TES * T / (Imprimir $ 0)" $ echo "Tessst" | AWK "/ TES * T / (Imprimir $ 0)"


Usando un símbolo * en expresiones regulares

Este símbolo de plantilla generalmente se usa para trabajar con palabras en las que los errores tipográficos, o para las palabras que permiten diferentes opciones para la ortografía:

$ Echo "Me gusta el color verde" | AWK "/ Colou * R / (Imprimir $ 0)" $ echo "Me gusta el color verde" | AWK "/ Colou * R / (Imprimir $ 0)"

Palabras de búsqueda que tienen diferentes opciones de escritura

En este ejemplo, la misma expresión regular reacciona a la palabra "color" y la palabra "color". Es así gracias al hecho de que el símbolo de "U", después de lo cual las estrellas se mantienen, pueden estar ausentes u ocurrir varias veces seguidas.

Otra oportunidad útil que surge de las características del símbolo de las estrellas es combinarla con un punto. Dicha combinación permite que la expresión regular responda a cualquier número de cualquier carácter:

$ AWK "/this.*test/(Print $ 0)" MyFile


Plantilla Reaccionando a cualquier número de cualquier carácter

En este caso, no importa cuántos personajes se encuentre entre las palabras "esto" y "prueba".

Las estrellas se pueden utilizar con clases de símbolos:

$ Echo "st" | AWK "/ S * T / (Imprimir $ 0)" $ echo "sábado" | AWK "/ S * T / (Imprimir $ 0)" Juego de $ echo "" | AWK "/ S * T / (Imprimir $ 0)"


Usando estrellas con clases de símbolos

En los tres ejemplos, se activa la expresión regular, ya que las estrellas después de la clase de caracteres significan que si se encuentran alguna cantidad de caracteres "A" o "E", y si no se pueden encontrar, la cadena coincidirá con la plantilla especificada.

Posix regular Ere Expressions

Plantillas pOSIX ESTÁNDAR Ere, que apoyan algunas utilidades de Linux pueden contener caracteres adicionales. Como ya se mencionó, AWK apoya este estándar, pero SED no lo es.

Aquí veremos los símbolos más utilizados que le serán útiles al crear sus propias expresiones regulares.

▍ Signo de retención

El signo de interrogación indica que el símbolo anterior puede reunirse en el texto una vez o no para cumplir. Este símbolo es uno de los metasimvols de repeticiones. Aquí hay unos ejemplos:

$ Echo "Tet" | AWK "/ TES? T / (Imprimir $ 0)" $ echo "prueba" | AWK "/ TES? T / (Imprimir $ 0)" $ echo "Tesst" | AWK "/ TES? T / (Imprimir $ 0)"


Signo de interrogación en expresiones regulares.

Como se puede ver, en el tercer caso, la letra "S" se reúne dos veces, por lo que la palabra "TESST" no responde a la expresión regular.

El signo de interrogación se puede utilizar con clases de símbolos:

$ Echo "tst" | AWK "/ T? St / (Imprimir $ 0)" $ echo "prueba" | AWK "/ T? ST / (Imprimir $ 0)" $ echo "TAST" | AWK "/ T? ST / (Imprimir $ 0)" $ echo "TAEST" | AWK "/ T? ST / (Imprimir $ 0)" $ echo "teest" | AWK "/ T? ST / (Imprimir $ 0)"


Clases de signo de interrogación y símbolo

Si no hay caracteres de una clase en una fila, o uno de ellos ocurre una vez, se activa la expresión regular, pero es necesario en la palabra aparecer dos caracteres y el sistema ya no se encuentra en el texto que coincide con el texto.

▍SIMOL "PLUS"

El símbolo más en la plantilla indica que la expresión regular detectará el deseado si el símbolo anterior se reunirá en el texto una o más veces. Al mismo tiempo, no habrá tal diseño en ausencia de un símbolo:

$ Echo "prueba" | AWK "/ TE + ST / (Imprimir $ 0)" $ echo "teest" | AWK "/ TE + ST / (Imprimir $ 0)" $ echo "tst" | AWK "/ TE + ST / (Imprimir $ 0)"


El símbolo de "plus" en expresiones regulares.

En este ejemplo, si no hay un símbolo "E" en la palabra, el motor de expresiones regulares no encuentra la plantilla en el texto que coincide con el texto. El símbolo de "plus" funciona y con las clases de símbolos, esto es similar a la etiqueta y el signo de interrogación:

$ Echo "tst" | AWK "/ T + ST / (Imprimir $ 0)" $ echo "prueba" | AWK "/ T + ST / (Imprimir $ 0)" $ echo "Tensa" | AWK "/ T + ST / (Imprimir $ 0)" $ echo "Teast" | AWK "/ T + ST / (Imprimir $ 0)"


Clases de signo y símbolo

En este caso, si hay algún personaje de la clase en la línea, el texto será detectado por el patrón apropiado.

▍ paréntesis de figuras

Los soportes de la figura que se pueden usar en Ereem plantillas son similares a los símbolos discutidos anteriormente, pero le permiten configurar con mayor precisión el número necesario de entradas del símbolo anteriormente. Puede especificar la restricción en dos formatos:
  • n es un número que especifica el número exacto de entradas deseadas
  • n, M - Dos números que se interpretan de la siguiente manera: "Al menos n veces, pero no más de M."
Aquí hay ejemplos de la primera opción:

$ Echo "tst" | AWK "/ TE (1) ST / (Imprimir $ 0)" Prueba de $ echo "" | AWK "/ TE (1) ST / (Imprimir $ 0)"

Soportes calculados en plantillas, busque un número exacto de ocurrencias

En las antiguas versiones de AWK, fue necesario usar la tecla de línea de comandos a través del intervalo para que el programa reconozca los intervalos en expresiones regulares, pero no es necesario hacer esto en nuevas versiones.

$ Echo "tst" | AWK "/ TE (1,2) ST / (Imprimir $)" $ echo "prueba" | AWK "/ TE (1,2) ST / (Imprimir $ 0)" $ echo "teest" | AWK "/ TE (1,2) ST / (Imprimir $ 0)" $ echo "TEEEST" | AWK "/ TE (1,2) ST / (Imprimir $ 0)"


Intervalo de macoba

En este ejemplo, el símbolo "E" debe cumplir en una cadena de 1 o 2 veces, entonces la expresión regular responderá al texto.

Los corchetes figurados se pueden utilizar con clases de símbolos. Aquí ya te han familiarizado los principios:

$ Echo "tst" | AWK "/ t (1,2) st / (Imprimir $ 0)" $ echo "prueba" | AWK "/ T (1,2) ST / (Imprimir $ 0)" $ echo "teest" | AWK "/ T (1,2) ST / (Imprimir $ 0)" $ echo "Teast" | AWK "/ t (1,2) st / (impresión $ 0)"


Grandes soportes y clases de símbolos.

La plantilla responderá al texto si cumple con el símbolo "A" o el símbolo "E".

▍Mimvivo lógico "o"

Símbolo | - Rasgo vertical, significa en expresiones regulares un lógico "o". Procesando una expresión regular que contiene varios fragmentos separados por dicho signo, el motor considerará el texto analizado adecuado en caso de que corresponda a cualquiera de los fragmentos. Aquí hay un ejemplo:

$ Echo "Esta es una prueba" | AWK "/ TEST | Examen / (Imprimir $ 0)" $ echo "Este es un examen" | AWK "/ prueba | examen / (Imprimir $ 0)" $ echo "Esto es algo más" | AWK "/ prueba | examen / (Imprimir $ 0)"


Lógico "o" en expresiones regulares

En este ejemplo, una expresión regular está configurada para buscar en el texto de las palabras "prueba" o "examen". Tenga en cuenta que entre fragmentos de plantilla y su símbolo de compartir | No debería haber huecos.

Los fragmentos de expresiones regulares se pueden agrupar utilizando paréntesis redonda. Si se agrupa una cierta secuencia de caracteres, el sistema percibirá como un símbolo normal. Es decir, por ejemplo, será posible aplicar los metacaracteres de repeticiones. Aquí es lo que parece:

$ Echo "Me gusta" | Awk "/ ¿Al igual (geeks)? / (Imprimir $ 0)" $ echo "como" | AWK "/ Al igual (geeks)? / (Imprimir $ 0)"


Agrupando fragmentos de expresiones regulares.

En estos ejemplos, la palabra "geeks" está encerrada en soportes redondos, después de este diseño, hay un signo de interrogación. Recuerde que el signo de interrogación significa "0 o 1 repetición", como resultado, la expresión regular reaccionará a la cadena "Me gusta", y en la cadena de FAVEEKEEKS.

Ejemplos prácticos

Después de desmontar los fundamentos de las expresiones regulares, es hora de hacer algo útil con ellos.

▍ El número de archivos

Escriba un script bash que cuenta los archivos en los directorios que se registran en entorno variable Camino. Para hacer esto, deberá comenzar, formar una lista de formas de directorios. Vamos a hacerlo con SED, reemplazando el colon en los espacios:

$ Echo $ ruta | Sed "s /: / / g"
El comando de reemplazo admite expresiones regulares como plantillas para buscar texto. En este caso, todo es extremadamente simple, estamos buscando un símbolo de colon, pero nadie se basa en usar aquí y otra cosa, todo depende de la tarea específica.
Ahora tiene que pasar por la lista recibida en el bucle y realizar la cantidad de archivos de acción necesarios para el cálculo. El plan General Script será así:

MyPath \u003d $ (Echo $ Ruta | SED "S /: / / G") para el directorio en $ MyPath do uno
Ahora escriba el texto completo del script utilizando el comando LS para obtener información sobre el número de archivos en cada director:

#! / bin / bash mypath \u003d $ (Echo $ Ruta | SED "S /: / g") cuenta \u003d 0 para directorio en $ mypath do check \u003d $ (directorio ls $) para artículo en $ cheques do cuenta \u003d $ [$ Count + 1] Hecho eco "$ directorio - $ cuenta" cuenta \u003d 0 listo
Cuando inicie el script, puede resultar que no existen algunos directorios de la ruta, no existe, no le impide calcular archivos en los directores existentes.


Contando archivos

El valor principal de este ejemplo es que usando el mismo enfoque, puede resolver tareas mucho más complejas. Qué exactamente, depende de sus necesidades.

▍ Compruebe las direcciones de correo electrónico

Hay sitios web con enormes colecciones de expresiones regulares que le permiten ver las direcciones correo electrónico, números de teléfono, etc. Sin embargo, una cosa es tomar lista, y otra cosa, crea algo tú mismo. Por lo tanto, escriba una expresión regular para revisar las direcciones de correo electrónico. Comencemos con el análisis de los datos de origen. Aquí, por ejemplo, una cierta dirección:

[Correo electrónico protegido]
El nombre de usuario, el nombre de usuario, puede consistir en alfanuméricos y algunos otros personajes. Es decir, es un punto, tablero, un símbolo de la adherencia, el signo más. Detrás del nombre de usuario debe firmar @.

Armado con estos conocimientos, comencemos a montar una expresión regular de su parte izquierda, que sirve para verificar el nombre de usuario. Eso es lo que hicimos:

^(+)@
Esta expresión regular se puede encontrar de la siguiente manera: "Al principio de la línea, debe haber al menos un carácter de aquellos que están en el grupo especificado en corchetes, y después de eso, el signo @ debe ir.

Ahora, el nombre del nombre de host - nombre de host. Las mismas reglas son aplicables aquí en cuanto al nombre de usuario, por lo que la plantilla para ello se verá así:

(+)
nombre de dominio nivel superior Obedece reglas especiales. Solo puede haber caracteres alfabéticos que deben tener al menos dos (por ejemplo, dichos dominios generalmente contienen el código del país), y no más de cinco. Todo esto significa que la plantilla para verificar la última parte de la dirección será:

\.({2,5})$
Puede leerlo así: "primero debe ser un punto, luego, de 2 a 5 caracteres alfabéticos, y después de eso, finaliza la línea".

Prepare plantillas para partes individuales de una expresión regular, los recogemos:

^(+)@(+)\.({2,5})$
Ahora queda solo para probar lo que pasó:

$ echo " [Correo electrónico protegido]"| AWK" / ^ (+) @ (+) \\. ((2,5) $$ / (Imprimir $ 0) "$ echo" [Correo electrónico protegido]"| AWK" / ^ (+) @ (+) \\. ((2,5) $ 0) "/ (Imprimir $ 0)"


Compruebe la dirección de correo electrónico utilizando expresiones regulares

El hecho de que el texto AWK transmitido se muestre en la pantalla significa que el sistema reconoció la dirección de correo electrónico.

Resultados

Si una expresión regular para verificar las direcciones de correo electrónico, que se cumplió al principio del artículo, parecía completamente incomprensible, con suerte, ahora no parece un conjunto de personajes sin sentido. Si esto es cierto, significa que este material ha cumplido su destino. De hecho, las expresiones regulares son un tema que puede participar en toda la vida, pero incluso la pequeña cosa que desmontamos, ya puede ayudarlo a escribir scripts que son textos bastante avanzados.

En esta serie de materiales, generalmente mostramos muy. ejemplos simples Scripts de bash que consistieron literalmente desde varias líneas. La próxima vez consideramos algo más a gran escala.

¡Queridos lectores! ¿Usas expresiones regulares al procesar textos en scripts de línea de comandos?

¡Buen tiempo, invitados!

En el artículo de hoy quiero tocar un tema tan enorme como Expresiones regulares. Creo que todos saben que el tema de las regídas (por lo que se llaman expresiones regulares en la jerga), inmensa en la cantidad de un poste. Por lo tanto, lo intentaré brevemente, pero como puede entender cómo recoger mis pensamientos en un grupo y transmitirlos a usted.

Comenzaré con el hecho de que hay variedades de expresiones regulares:

1. Expresiones regulares tradicionales (Son básicos, básicos y expresiones básicas regulares (BRE))

  • la sintaxis de estas expresiones se define como desactualizada, pero sin embargo sigue siendo generalizada y utilizada por muchas utilidades UNIX
  • Las principales expresiones regulares incluyen los siguientes Metasimwols (sobre sus valores a continuación):
    • \\ (\\) - la opción inicial para () (en avanzado)
    • \\ (\\) - la opción inicial para () (en avanzado)
    • \nORTE. dónde nORTE. - Número de 1 a 9
  • Características del uso de Data Metasimvols:
    • La estrella debe seguir después de una expresión correspondiente a un solo símbolo. Ejemplo: *.
    • Expresión \\( cuadra\\) * Debe ser considerado incorrecto. En algunos casos, corresponde a cero o más repeticiones. cuadra . En otros, corresponde a la cadena. cuadra* .
    • Dentro de la clase simbólica, los valores de caracteres especiales se ignoran principalmente. Casos especiales:
    • Para agregar un símbolo ^ a un conjunto, debe colocarse, no, no, primero.
    • Para agregar un símbolo al conjunto, debe colocarse allí primero o último. Por ejemplo:
      • la plantilla DNS-nombre DNS, donde las letras, números, menos y separadores de puntos pueden incluir: [-0-9A-ZA-Z.];
      • cualquier carácter, además de menos y números: [^ -0-9].
    • Para agregar un símbolo [o] al conjunto, se debe colocar primero. Por ejemplo:
      • corresponde a], [, a o b.

2. Expresiones regulares extendidas (ellos son expresiones regulares extendidas (ANTES DE))

  • La sintaxis de estas expresiones es similar a la sintaxis de las expresiones principales, excepto:
    • Canceló el uso de la línea de trenza inversa para MetaSimvols () y ().
    • La línea de hundimiento inversa delante del metacimol se cancela su significado especial.
    • Rechazado teóricamente irregular diseño \\ nORTE. .
    • Metacimol añadido +? , | .

3. Expresiones regulares compatibles con Perl(ellos son Expresiones regulares compatibles con Perl (PCRE))

  • tenga una sintaxis más rica y, al mismo tiempo, una sintaxis predecible que incluso POSIX Ere, por lo que se usan aplicaciones a menudo.

Expresiones regulares consiste enplantillas Especifique la plantilla Buscar. Patrón consiste de reglasbúsqueda, que se compilan de símbolosy metasimvolov.

Reglas de búsqueda Definido como sigue operaciones:

Listado |

Rasgo vertical (|) Comparte las opciones permitidas, se puede decir: lógico o. Por ejemplo, "gris | gris" corresponde gris. o gris.

Agrupación o sindicato ()

Entre paréntesis Se utiliza para determinar el área de acción y prioridad de los operadores. Por ejemplo, "gris | gris" y "gr (a | e) y" son muestras diferentes, pero ambos describen un conjunto que contiene gris. y gris.

Cuantificación ()? * +.

Cuantificador Después de un símbolo o grupo determina cuántas veces anteriorpuede ocurrir la expresión.

expresión general, las repeticiones pueden ser de m a n inclusive.

expresión general m y mas repeticiones.

expresión general no más de n repetición.

liso n repeticiones.

Signo de interrogaciónmedio 0 o 1. veces lo mismo que {0,1} . Por ejemplo, "Colou? R" corresponde a color, I. color..

Estrellamedio 0, 1 o cualquier número Una vez ( {0,} ). Por ejemplo, "Go * GLE" corresponde gboor, guía., google y etc.

Un plusmedio al menos 1. Una vez ( {1,} ). Por ejemplo, "Go + Gle" coincide guía., google etc. (pero no gboor).

La sintaxis específica de estas expresiones regulares depende de la implementación. (es decir, en expresiones básicas regulares Símbolos (y)- Retroceso blindado)

MetductoresSimplemente, estos son símbolos que no coinciden con su valor real, es decir, un símbolo. (punto) no es un punto, sino cualquier carácter, etc. Por favor, familiarícese con MetaSimvols y sus valores:

. corresponden a las unocualquier símbolo
[alguna cosa] Corresponden a las alguiensímbolo del número de prisioneros entre paréntesis. Al mismo tiempo: el símbolo "-" se interpreta literalmente solo si se encuentra directamente después de abrir o frente al soporte de cierre: o [-ABC]. De lo contrario, denota el intervalo de caracteres. Por ejemplo, corresponde a "A", "B" o "C". Corresponde a las letras del alfabeto latino latino. Estas designaciones se pueden combinar: corresponde a A, B, C, Q, R, S, T, U, V, W, X, Y, ZC para establecer la correspondencia de los caracteres "[" o "]", es suficiente Al soporte de cierre, fue el primer carácter después de abrir: se corresponde a "]", "[", "A" o "B". Si se presentó el valor en los soportes cuadrados con el símbolo ^, entonces el valor de la expresión corresponde a símbolo único entre ellos que no están entre paréntesis. Por ejemplo, [^ ABC] corresponde a cualquier símbolo, excepto "A", "B" o "C". [^ A-Z] corresponde a cualquier carácter, excepto los símbolos del registro inferior en el alfabeto latino.
^ Corresponde al inicio del texto (o el comienzo de cualquier cadena si la línea es la línea).
$ Corresponde al final del texto (o el final de cualquier cadena si el modo de línea).
\\(\\) o () Anuncia "nombrado" (expresión agrupada), que se puede utilizar más adelante (ver el siguiente elemento: \\ nORTE.). "La suscripción anunciada" es también un "bloque". A diferencia de otros operadores, esto (en la sintaxis tradicional) requiere un bexlesh, en un símbolo extendido y Perl, no es necesario.
\nORTE. Dónde nORTE. - Esta es una cifra del 1 al 9; corresponden a las nORTE.-Te señaló en casa (por ejemplo, (ABCD) \\ 0, es decir, los caracteres ABCD son notados por cero). Este diseño teóricamente irregularNo fue aceptada en la sintaxis avanzada de expresiones regulares.
*
  • Estrelladespués de la expresión correspondiente al símbolo de la unidad corresponde a ceroo más copiasde esta expresión (precedente). Por ejemplo, "*" corresponde a una cadena vacía, "X", "Y", "ZX", "ZYX", etc.
  • \nORTE.*, dónde nORTE. - Este es un número del 1 al 9, corresponde a cero o más entradas para la conformidad. nORTE.- Una marcada imitación. Por ejemplo, "\\ (a. \\) C \\ 1 *" corresponde a "abcab" y "abcaba", pero no "abcac".

La expresión concluida en "\\ (" y "\\)" y acompañada "*" debe considerarse incorrecta. En algunos casos, corresponde a cero o más ocurrencias de la cadena que se encerró entre paréntesis. En otros, corresponde a la expresión encerrada en el soporte, dado el símbolo "*".

\{x.,y\} Corresponde al último ( próximo) un bloque que ocurre al menos x. y no mas y hora. Por ejemplo, "A \\ (3.5 \\)" corresponde a "AAA", "AAAA" o "AAAAA". A diferencia de otros operadores, esto (en la sintaxis tradicional) requiere un bexlesh.
.* Designación de cualquier número de caracteres entre dos partes de la expresión regular.

METASIMWALLS Ayudamos a usar diferente conformidad. Pero, ¿cómo imaginar el mínimo por el símbolo habitual, es decir, el símbolo [(soporte cuadrado) el valor del soporte cuadrado? Simplemente:

  • necesito prevenir ( proteger) MetaCimol (. * + \\? ()) Revestimiento. Por ejemplo \\. o \\[

Para simplificar la tarea de algunos conjuntos de caracteres, se combinaron en el llamado. clases y categorías de personajes.. POSIX Declaración estandarizada de algunas clases y categorías de caracteres, como se muestra en la siguiente tabla:

Clase de posix similar designacion
[: Superior:] símbolos del registro superior
[: Más bajo:] símbolos del registro inferior.
[: Alfa:] símbolos del registro superior e inferior.
[: Alnum:] números, símbolos de registro superior e inferior.
[: Dígito:] números
[: Xdigit:] números hexadecimales
[: PUNT:] [.,!?:…] signos de puntuación
[: Blanco:] [\\ t] espacio y pestaña.
[: Espacio:] [\\ t \\ n \\ r \\ f \\ v] símbolos de paso
[: Cntrl:] símbolos de control
[: Grafico:] [^ \\ t \\ n \\ r \\ f \\ v] símbolos de impresión
[: Impresión:] [^ \\ t \\ n \\ r \\ f \\ v] símbolos de impresión y Skip Symbols

REGEX tiene tal cosa como:

Codicia regex

Intentaré describir lo más claro posible. Supongamos que queremos encontrar todo. Etiquetas html En algún texto. Localizó la tarea, queremos encontrar los valores de los prisioneros entre< и >, junto con estos tacones. Pero sabemos que las etiquetas tienen longitud diferente Y las etiquetas en sí mismas, al menos 50 piezas. Líparlos a todos, concluyendo en la Metacarativa: la tarea requiere demasiado tiempo. Pero sabemos que tenemos una expresión. * (Punto Asterisco), caracterizando cualquier número de caracteres en la cadena. Con esta expresión, trataremos de encontrar en el texto (

Entonces, Cómo crear una RAID 10/50 en el controlador LSI MEGARAID (relevante y para: Intel SRCU42X, Intel SRCS16):

) todos los valores entre< и >. Como resultado, toda la cadena corresponderá a esta expresión. Por qué, porque Remex - Zhaden e intenta capturar cualquier número de caracteres entre< и >, respectivamente, la línea entera comenzando. < p\u003e Entonces, ...y acabado ...> ¡Pertenecerá a esta regla!

Espero, por ejemplo, está claro qué codicia es. Para deshacerse de esta codicia, puedes ir a la siguiente manera:

  • tener en cuenta los personajes no Muestra relevante deseada (por ejemplo:<[^>] *\u003e Para el caso descrito anteriormente)
  • fiable de la codicia agregando una definición de cuantifier como indeseable:
    • *? - "No codicioso" ("perezoso") equivalente *
    • +? - "No codicioso" ("perezoso") equivalente +
    • (norte,)? - "No codicioso" ("perezoso") equivalente (n,)
    • . *? - "No codicioso" ("perezoso") equivalente. *

Todo lo anterior quiere suplementar. la sintaxis de expresiones regulares extendidas:

Las expresiones regulares en POSIX son similares a la sintaxis tradicional UNIX, pero con la adición de algunos metasimvols:

Un plusindica que anteriorsímbolo o grupopuede ser repetido una o varias veces. A diferencia de las estrellas, se requiere al menos una repetición.

Signo de interrogación Lo hace anteriorel símbolo o grupo es opcional. En otras palabras, en la línea correspondiente puede estar ausente o presente liso unohora.

Rasgo verticalcomparte opciones alternativas Expresiones regulares. Un carácter establece dos alternativas, pero puede haber más de ellas, es suficiente usar más desprendimientos verticales. Debe recordarse que este operador utiliza la parte máxima posible de la expresión. Por esta razón, el operador alternativo se usa más a menudo dentro de los soportes.

También se canceló el uso de la trenza inversa [... \\) se convierte (...) y \\ (... \\) se convierte en (...).

Al final de la publicación, daré algunos ejemplos de Uso de Regex:

$ Cat Text1 1 Apple 2 Pear 3 Banana $ GREP P Text1 1 Apple 2 pera $ GREP "PP *" Text1 1 Apple 2 pera $ Cat Text1 | GREP "L \\ | N" 1 Apple 3 Banana $ echo -e "Encuentre un \\ n * aquí" | Grep "\\ *" * Aquí $ grep "pl \\? * R" text1 # p, en líneas donde hay R2 PER $ GREP "A .." Text1 # Filas con A, seguido de al menos 2 símbolos 1 Apple 3 Banana $ GREP "" Text1 # Buscar líneas donde hay 3 o P 1 Apple 2 Pear 3 banana $ echo -e "Encuentre un \\ n * aquí \\ Nsomewhere". | GREP "[. *]" * Aquí en algún lugar ... Nombre] $ echo -e "123 \\ N456 \\ N789 \\ N0" | grep "" 123 456 789 $ sed -e "/ (a. **) \\ | \\ (-p. * / a / s / a / a / g" text1 # reemplazo y en todas las líneas donde después y Se va, o después de P, P 1 Apple 2 pera 3 banana * \\ ./ Última palabra ./g "Primero. Una última palabra. Esta es una última palabra.

Atentamente, MC.SIM!

En el artículo de hoy quiero tocar un tema tan enorme como Expresiones regulares. Creo que todos saben que el tema de las regídas (por lo que se llaman expresiones regulares en la jerga), inmensa en la cantidad de un poste.

Comenzaré con el hecho de que hay variedades de expresiones regulares:

1. Expresiones regulares tradicionales (Son básicos, básicos y expresiones básicas regulares (BRE))

  • la sintaxis de estas expresiones se define como desactualizada, pero sin embargo sigue siendo generalizada y utilizada por muchas utilidades UNIX
  • Las principales expresiones regulares incluyen los siguientes Metasimwols (sobre sus valores a continuación):
    • \\ (\\) - la opción inicial para () (en avanzado)
    • \\ (\\) - la opción inicial para () (en avanzado)
    • \nORTE. dónde nORTE. - Número de 1 a 9
  • Características del uso de Data Metasimvols:
    • La estrella debe seguir después de una expresión correspondiente a un solo símbolo. Ejemplo: *.
    • Expresión \\( cuadra\\) * Debe ser considerado incorrecto. En algunos casos, corresponde a cero o más repeticiones. cuadra . En otros, corresponde a la cadena. cuadra* .
    • Dentro de la clase simbólica, los valores de caracteres especiales se ignoran principalmente. Casos especiales:
    • Para agregar un símbolo ^ a un conjunto, debe colocarse, no, no, primero.
    • Para agregar un símbolo al conjunto, debe colocarse allí primero o último. Por ejemplo:
      • la plantilla DNS-nombre DNS, donde las letras, números, menos y separadores de puntos pueden incluir: [-0-9A-ZA-Z.];
      • cualquier carácter, además de menos y números: [^ -0-9].
    • Para agregar un símbolo [o] al conjunto, se debe colocar primero. Por ejemplo:
      • corresponde a], [, a o b.

2. Expresiones regulares extendidas (ellos son expresiones regulares extendidas (ANTES DE))

  • La sintaxis de estas expresiones es similar a la sintaxis de las expresiones principales, excepto:
    • Canceló el uso de la línea de trenza inversa para MetaSimvols () y ().
    • La línea de hundimiento inversa delante del metacimol se cancela su significado especial.
    • Rechazado teóricamente irregular diseño \\ nORTE. .
    • Metacimol añadido +? , | .

3. Expresiones regulares compatibles con Perl(ellos son Expresiones regulares compatibles con Perl (PCRE))

  • tenga una sintaxis más rica y, al mismo tiempo, una sintaxis predecible que incluso POSIX Ere, por lo que se usan aplicaciones a menudo.

Expresiones regulares consiste enplantillas Especifique la plantilla Buscar. Patrón consiste de reglasbúsqueda, que se compilan de símbolosy metasimvolov.

Reglas de búsqueda Definido como sigue operaciones:

Listado |

Rasgo vertical (|) Comparte las opciones permitidas, se puede decir: lógico o. Por ejemplo, "gris | gris" corresponde gris. o gris.

Agrupación o sindicato ()

Entre paréntesis Se utiliza para determinar el área de acción y prioridad de los operadores. Por ejemplo, "gris | gris" y "gr (a | e) y" son muestras diferentes, pero ambos describen un conjunto que contiene gris. y gris.

Cuantificación ()? * +.

Cuantificador Después de un símbolo o grupo determina cuántas veces anteriorpuede ocurrir la expresión.

expresión general, las repeticiones pueden ser de m a n inclusive.

expresión general m y mas repeticiones.

expresión general no más de n repetición.

liso n repeticiones.

Signo de interrogaciónmedio 0 o 1. veces lo mismo que {0,1} . Por ejemplo, "Colou? R" corresponde a color, I. color..

Estrellamedio 0, 1 o cualquier número Una vez ( {0,} ). Por ejemplo, "Go * GLE" corresponde gboor, guía., google y etc.

Un plusmedio al menos 1. Una vez ( {1,} ). Por ejemplo, "Go + Gle" coincide guía., google etc. (pero no gboor).

La sintaxis específica de estas expresiones regulares depende de la implementación. (es decir, en expresiones básicas regulares Símbolos (y)- Retroceso blindado)

MetductoresSimplemente, estos son símbolos que no coinciden con su valor real, es decir, un símbolo. (punto) no es un punto, sino cualquier carácter, etc. Por favor, familiarícese con MetaSimvols y sus valores:

. corresponden a las unocualquier símbolo
[alguna cosa] Corresponden a las alguiensímbolo del número de prisioneros entre paréntesis. Al mismo tiempo: el símbolo "-" se interpreta literalmente solo si se encuentra directamente después de abrir o frente al soporte de cierre: o [-ABC]. De lo contrario, denota el intervalo de caracteres. Por ejemplo, corresponde a "A", "B" o "C". Corresponde a las letras del alfabeto latino latino. Estas designaciones se pueden combinar: corresponde a A, B, C, Q, R, S, T, U, V, W, X, Y, ZC para establecer la correspondencia de los caracteres "[" o "]", es suficiente Al soporte de cierre, fue el primer carácter después de abrir: se corresponde a "]", "[", "A" o "B". Si se presentó el valor en los soportes cuadrados con el símbolo ^, entonces el valor de la expresión corresponde a símbolo único entre ellos que no están entre paréntesis. Por ejemplo, [^ ABC] corresponde a cualquier símbolo, excepto "A", "B" o "C". [^ A-Z] corresponde a cualquier carácter, excepto los símbolos del registro inferior en el alfabeto latino.
^ Corresponde al inicio del texto (o el comienzo de cualquier cadena si la línea es la línea).
$ Corresponde al final del texto (o el final de cualquier cadena si el modo de línea).
\\(\\) o () Anuncia "nombrado" (expresión agrupada), que se puede utilizar más adelante (ver el siguiente elemento: \\ nORTE.). "La suscripción anunciada" es también un "bloque". A diferencia de otros operadores, esto (en la sintaxis tradicional) requiere un bexlesh, en un símbolo extendido y Perl, no es necesario.
\nORTE. Dónde nORTE. - Esta es una cifra del 1 al 9; corresponden a las nORTE.-Te señaló en casa (por ejemplo, (ABCD) \\ 0, es decir, los caracteres ABCD son notados por cero). Este diseño teóricamente irregularNo fue aceptada en la sintaxis avanzada de expresiones regulares.
*
  • Estrelladespués de la expresión correspondiente al símbolo de la unidad corresponde a ceroo más copiasde esta expresión (precedente). Por ejemplo, "*" corresponde a una cadena vacía, "X", "Y", "ZX", "ZYX", etc.
  • \nORTE.*, dónde nORTE. - Este es un número del 1 al 9, corresponde a cero o más entradas para la conformidad. nORTE.- Una marcada imitación. Por ejemplo, "\\ (a. \\) C \\ 1 *" corresponde a "abcab" y "abcaba", pero no "abcac".

La expresión concluida en "\\ (" y "\\)" y acompañada "*" debe considerarse incorrecta. En algunos casos, corresponde a cero o más ocurrencias de la cadena que se encerró entre paréntesis. En otros, corresponde a la expresión encerrada en el soporte, dado el símbolo "*".

\{x.,y\} Corresponde al último ( próximo) un bloque que ocurre al menos x. y no mas y hora. Por ejemplo, "A \\ (3.5 \\)" corresponde a "AAA", "AAAA" o "AAAAA". A diferencia de otros operadores, esto (en la sintaxis tradicional) requiere un bexlesh.
.* Designación de cualquier número de caracteres entre dos partes de la expresión regular.

METASIMWALLS Ayudamos a usar diferente conformidad. Pero, ¿cómo imaginar el mínimo por el símbolo habitual, es decir, el símbolo [(soporte cuadrado) el valor del soporte cuadrado? Simplemente:

  • necesito prevenir ( proteger) MetaCimol (. * + \\? ()) Revestimiento. Por ejemplo \\. o \\[

Para simplificar la tarea de algunos conjuntos de caracteres, se combinaron en el llamado. clases y categorías de personajes.. POSIX Declaración estandarizada de algunas clases y categorías de caracteres, como se muestra en la siguiente tabla:

Clase de posix similar designacion
[: Superior:] símbolos del registro superior
[: Más bajo:] símbolos del registro inferior.
[: Alfa:] símbolos del registro superior e inferior.
[: Alnum:] números, símbolos de registro superior e inferior.
[: Dígito:] números
[: Xdigit:] números hexadecimales
[: PUNT:] [.,!?:…] signos de puntuación
[: Blanco:] [\\ t] espacio y pestaña.
[: Espacio:] [\\ t \\ n \\ r \\ f \\ v] símbolos de paso
[: Cntrl:] símbolos de control
[: Grafico:] [^ \\ t \\ n \\ r \\ f \\ v] símbolos de impresión
[: Impresión:] [^ \\ t \\ n \\ r \\ f \\ v] símbolos de impresión y Skip Symbols

REGEX tiene tal cosa como:

Codicia regex

Intentaré describir lo más claro posible. Supongamos que queremos encontrar todas las etiquetas HTML en algún texto. Localizó la tarea, queremos encontrar los valores de los prisioneros entre< и >, junto con estos tacones. Pero sabemos que las etiquetas tienen una longitud y etiquetas diferentes, al menos 50 piezas. Líparlas todas, concluyendo en el Metachamivol: la tarea es demasiado lendible. Pero sabemos que tenemos una expresión. * (Punto Asterisco), caracterizando cualquier número de caracteres en la cadena. Con esta expresión, trataremos de encontrar en el texto (

Entonces, Cómo crear una RAID 10/50 en el controlador LSI MEGARAID (relevante y para: Intel SRCU42X, Intel SRCS16):

) todos los valores entre< и >. Como resultado, toda la cadena corresponderá a esta expresión. Por qué, porque Remex - Zhaden e intenta capturar cualquier número de caracteres entre< и >, respectivamente, la línea entera comenzando. < p\u003e Entonces, ...y acabado ...> ¡Pertenecerá a esta regla!

Espero, por ejemplo, está claro qué codicia es. Para deshacerse de esta codicia, puedes ir a la siguiente manera:

  • tener en cuenta los personajes no Muestra relevante deseada (por ejemplo:<[^>] *\u003e Para el caso descrito anteriormente)
  • fiable de la codicia agregando una definición de cuantifier como indeseable:
    • *? - "No codicioso" ("perezoso") equivalente *
    • +? - "No codicioso" ("perezoso") equivalente +
    • (norte,)? - "No codicioso" ("perezoso") equivalente (n,)
    • . *? - "No codicioso" ("perezoso") equivalente. *

Todo lo anterior quiere suplementar. la sintaxis de expresiones regulares extendidas:

Las expresiones regulares en POSIX son similares a la sintaxis tradicional UNIX, pero con la adición de algunos metasimvols:

Un plusindica que anteriorsímbolo o grupopuede ser repetido una o varias veces. A diferencia de las estrellas, se requiere al menos una repetición.

Signo de interrogación Lo hace anteriorel símbolo o grupo es opcional. En otras palabras, en la línea correspondiente puede estar ausente o presente liso unohora.

Rasgo verticalcomparte opciones alternativas para expresiones regulares. Un carácter establece dos alternativas, pero puede haber más de ellas, es suficiente usar más desprendimientos verticales. Debe recordarse que este operador utiliza la parte máxima posible de la expresión. Por esta razón, el operador alternativo se usa más a menudo dentro de los soportes.

También se canceló el uso de la trenza inversa [... \\) se convierte (...) y \\ (... \\) se convierte en (...).

Al final de la publicación, daré algunos ejemplos de Uso de Regex:

$ Cat Text1 1 Apple 2 pera 3 banana $ grep p texto1 1 Apple 2 pera $ GREP PEA Text1 2 pera $ grep "p *" text1 1 Apple 2 pera 3 plátano $ grep "pp *" text1 1 Apple 2 pera $ grep " X "Text1 $ GREP" X * "Text1 1 Apple 2 Pear 3 Banana $ Cat Text1 | GREP "L \\ | N" 1 Apple 3 Banana $ echo -e "Encuentre un \\ n * aquí" | GREP "\\ *" * AQUÍ $ GREP "PP \\ +" Text1 # cadenas, con un contenido de una P y 1 o más P 1 Apple $ GREP "PL \\? E" Text1 1 Apple 2 pera $ grep "pl \\? E "Text1 # PE con un posible símbolo L 1 Apple 2 pera $ grep" p. * R "text1 # p, en líneas donde hay R 2 PER $ GREP" A .. "Text1 # Filas con A, seguidas de Al menos 2 caracteres 1 Apple 3 Banana $ GREP "\\ (A \\) \\ +" Text1 # Buscar para más repetir un 3 banana $ grep "an \\ (an \\) \\ +" text1 # Buscar para 2x repite un 3 plátano $ grep "" Text1 # Buscar filas, donde hay 3 o P 1 Apple 2 Pear 3 banana $ echo -e "Encuentre un \\ n * aquí \\ Nsomewhere". | Grep "[. *]" * A pie. $ # Buscando símbolos de 3 a 7 $ echo -e "123 \\ N456 \\ N789 \\ N0" | Grep "" "123 456 789 $ # Buscando un dígito, detrás de los cuales no hay letras N y R $ GREP al final de la línea" [[: dígito:]] [^ nr] * $ "Text1 1 Apple $ Sed -e "/ \\ (a. * A \\) \\ | \\ (p. * P \\) / s / a / a / g" text1 # reemplazo y en una en todas las líneas, donde después y o después de R va P 1 Apple 2 pera 3 banana $ sed -e "/ ^ [^ lmnxyz] * $ / s / oreja / cada / g" Text1 # Reemplazo de la oreja en las líneas que no se inician en LMNXYZ 1 Apple 2 Peach 3 Banana $ echo "primero . Una frase Esta es una sensibilidad ". | \\ # Reemplazo de la última palabra en una oración en el último mundo. \u003e SED -E "S / [^] * \\ ./ Última palabra./G" Primero. Una última palabra Esta es una última palabra.

Las expresiones regulares son una herramienta muy poderosa para buscar texto en la plantilla, procesamiento y líneas, que se pueden usar para resolver una variedad de tareas. Aquí están los principales de ellos:

  • Comprobación de la entrada de texto;
  • Buscar y reemplazar texto en el archivo;
  • Paquete de renombramientos de paquetes;
  • Interacción con servicios como Apache;
  • Comprobando la cadena para que coincida con la plantilla.

Esta lejos de lista llenaLas expresiones regulares te permiten hacer mucho más. Pero para nuevos usuarios, pueden parecer demasiado complejos, ya que se usa un idioma especial para formarlos. Pero dadas las oportunidades proporcionadas, las expresiones regulares de Linux deben conocer y poder usar cada administrador de sistema.

En este artículo, consideraremos expresiones regulares de Bash para principiantes para que pueda lidiar con todas las capacidades de esta herramienta.

En expresiones regulares, se pueden usar dos tipos de caracteres:

  • letras ordinarias;
  • metacimol.

Los caracteres convencionales son letras, números y signos de puntuación a partir de los cuales consisten las líneas. Todos los textos consisten en letras y puede usarlos en expresiones regulares para buscar la posición deseada en el texto.

Metasimwalls son otra cosa, son los que dan fuerza a las expresiones regulares. Con la ayuda de METASIMVOL, puede hacer mucho más que buscar un símbolo. Puede buscar combinaciones de caracteres, use el número dinámico de su número y elija los rangos. Todos los mezcladores especiales se pueden dividir en dos tipos, estos son símbolos de reemplazo que son reemplazados por caracteres convencionales, o declaraciones que indican cuántas veces se puede repetir el símbolo. La sintaxis de la expresión regular se verá como:

normal_simviv mezclador especial_productor

sIMAL_ZAMES ESPECIALES mezclador especial_productor

  • - con una trenza inversa, los especialistas alfabéticos comienzan, y se usa si es necesario usar un monitor especial en forma de un signo de puntuación;
  • ^ - indica el inicio de la línea;
  • $ - Indica el final de la línea;
  • * - indica que el símbolo anterior se puede repetir 0 o más;
  • + - indica que el símbolo anterior debe repetir más de una o más veces;
  • ? - El símbolo anterior puede ocurrir cero o una vez;
  • (NORTE) - indica cuántas veces necesita repetir el símbolo anterior;
  • (N, n) - el símbolo anterior se puede repetir de n a n veces;
  • . - cualquier carácter además de la traducción de la cadena;
  • - cualquier carácter especificado entre paréntesis;
  • x | W. - símbolo x o y símbolo;
  • [^ Az] - cualquier carácter, excepto los indicados entre paréntesis;
  • - cualquier carácter del rango especificado;
  • [^ a-z] - cualquier personaje que no esté en el rango;
  • b. - denota la palabra borde con un espacio;
  • B. - indica que el símbolo debe estar dentro de la palabra, por ejemplo, la UX coincide con UXB o TUXEDO, pero no coincide con Linux;
  • d. - significa que el personaje es un dígito;
  • D. - Símbolo no cifactorio;
  • nORTE. - Símbolo de traducción de línea;
  • s. - uno de los símbolos del espacio, espacio, tabulación, etc.
  • S. - Cualquier carácter además de un espacio;
  • t. - Símbolo de mesas;
  • v. - Símbolo de la tabulación vertical;
  • w. - cualquier símbolo de letras, incluido el subrayado;
  • W. - cualquier símbolo de letras excepto subrayado;
  • uXXX - Símbolo UNICDOE.

Es importante tener en cuenta que antes de los especiales icónicos, debe usar un rasgo oblicuo para indicar que el especialista es el siguiente. Eso es correcto y lo contrario, si desea usar un especialista, que se aplica sin una barra como un símbolo convencional, tendrá que agregar una inclinación.

Por ejemplo, desea encontrar una línea 1+ 2 \u003d 3 en el texto. Si usa esta línea como una expresión regular, no encontrará nada, porque el sistema interpreta una ventaja como especialista, que informa que la unidad anterior debe repetir una o más veces. Por lo tanto, debe protegerse: 1 + 2 \u003d 3. Sin blindaje, nuestra expresión regular corresponderá a solo una cadena 11 \u003d 3 o 111 \u003d 3 y así sucesivamente. Antes de que la línea no sea necesaria, porque no es un especialista.

Ejemplos de uso de expresiones regulares.

Ahora que hemos considerado lo básico y sabes cómo funciona todo, queda por consolidar el conocimiento adquirido sobre las expresiones regulares de Linux GREP en la práctica. Dos símbolos especiales muy útiles son ^ y $, que indican el principio y el final de la cadena. Por ejemplo, queremos que todos los usuarios se registren en nuestro sistema cuyo nombre comienza en s. Entonces puedes aplicar una expresión regular. «^ S». Puedes usar el comando EGREP:

egrep "^ s" / etc / passwd

Si queremos seleccionar cadenas de acuerdo con el último carácter en la línea, que se puede usar $ por esto. Por ejemplo, elige todos usuarios del sistema, sin cáscara, los registros de tales usuarios terminan en FALSO:

eGREP "FALSO $" / etc / passwd

Para mostrar los nombres de usuario que comienzan en S o D, use tal expresión:

eGREP "^" / etc / passwd

El mismo resultado se puede obtener utilizando el símbolo "|". La primera opción es más adecuada para los rangos, y el segundo se usa a menudo para normal o / o:

eGREP "^" / etc / passwd

Ahora vamos a elegir a todos los usuarios cuyo nombre no es tres caracteres. El nombre de usuario se completa con un colon. Podemos decir que puede contener cualquier símbolo de letra que debe repetirse tres veces antes del colon:

eGREP "^ W (3):" / etc / passwd

conclusiones

En este artículo, revisamos expresiones regulares de Linux, pero estos fueron solo los más básicos. Si fumas un poco más profundo, encontrarás que con esta herramienta puedes hacer cosas mucho más interesantes. El tiempo dedicado al desarrollo de expresiones regulares definitivamente costará eso.

Al final de la conferencia de Yandex Pro Expressions Regular: