3 votos

Habilitar grep para que coincida con la expresión regular

Activar el comando 'grep' el retorno de la expresión regular corresponde exactamente.

Comando grep imprimirá una línea cuando la línea que contiene una cadena que coincide con una expresión, que no es útil para la búsqueda de contenido especificado. Por ejemplo, yo tengo el vocabulario de los archivos con formato

    **word**
    1. Definition:
    2. Usage
    3. Others

Me gustaría recuperar todas las palabras para hacer una lista de palabras dentro de los archivos

    grep '\*\*[^*]*\*\*'

Volver volúmenes de contenido.

Cómo habilitar grep para coger sólo la "palabra"?

3voto

Douglas Puntos 10417

Uso awk.

Este comando "extraer" una masiva lista de palabras asumiendo que es en el formato que se especifica arriba:

awk '/\*\*/,/\*\*/ {print substr($0, 3, length($0)-4)}' <filename>

Ejemplo:

Para este ejemplo, supongamos que tenemos un archivo de texto llamado words.txt con el siguiente contenido:

**test**
1. Definition:
2. Usage
3. Others

**foo**
1. Definition:
2. Usage
3. Others

**bar**
1. Definition:
2. Usage
3. Others


$ awk '/\*\*/,/\*\*/ {print substr($0, 3, length($0)-4)}' words.txt

test
foo
bar

Lo que está Haciendo

  • /\*\*/,/\*\*/ Este es el patrón de la gama. Yo podría haber hecho esto buscando la primera serie de asteriscos (/\*\*) y ha hecho, pero he utilizado una gama completa para la integridad. Un método no es más "correcto" que el otro.

  • {print substr($0, 3, length($0)-4)}' Imprime la subsring (de la cadena **word**) a partir de la 3ª carácter, con una longitud de toda la cadena (length($0)) menos de cuatro caracteres (los cuatro asteriscos).

  • <filename> Este es el archivo de entrada para el proceso de la awk comando

0voto

qarma Puntos 71

Aquí está el resultado he obtenido utilizando un archivo de ejemplo con contenidos que tomé prestado de Allan, junto con su grep comando:

command line output

Al principio, pensé que no había problema, ya que parece que vuelve a las líneas que contengan la palabra, y supuse que quería mantener el **, en vista de cómo explícitamente intencional parece estar en la regexp cadena.

Pero, después de haber leído tu ask con más cuidado, ahora estoy viendo que usted no desea que el **, y sólo quiere que la palabra(s) contenida dentro de la **.

Para ello, puede utilizar el mismo grep comando, luego de la tubería a través de a tr a tener que eliminar la **:

grep '\*\*[^*]*\*\*' /path/to/file | tr -d '*'

Result of the shell command

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X