11 votos

Impresión de una parte específica de una salida

Supongamos que hay un comando como:

cat /boot/config-3.19.0-32-generic | grep CONFIG_ARCH_DEFCONFIG

El resultado es, como tal:

CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"

Ahora, mi pregunta es: ¿hay alguno de los comandos que se imprima sólo lo que está dentro de las comillas, es decir, " "?

Y podría por favor explicar el comando un poco? Gracias! en adelantado.

15voto

Terrance Puntos 3425

Sí, usted puede hacer eso. El comando sería:

cat /boot/config-3.19.0-32-generic | grep CONFIG_ARCH_DEFCONFIG | awk -F'"' '{print $2}'

que volvería sólo:

arch/x86/configs/x86_64_defconfig

El awk comando utiliza separadores de campo con el -F comando, y establecer para el uso de comillas dobles, escriba con comillas simples alrededor de ella, como -F'"'. A continuación, el '{print $2}' dice awk para imprimir el segundo set después de que el separador de campo.

Espero que esto ayude!

11voto

ieplugin Puntos 216

Usted puede hacer eso con una sola grep comando:

grep -Po '^CONFIG_ARCH_DEFCONFIG="\K[^"]*' /boot/config-3.19.0-32-generic

O (un poco más largo y más convulted):

grep -Po '^CONFIG_ARCH_DEFCONFIG="\K.*?(?=")' /boot/config-3.19.0-32-generic
  • -P: indica grep a interpretar el patrón como un PCRE (Regulares Compatibles con Perl de Expresión);
  • -o: indica grep para imprimir sólo el partido;
  • ^CONFIG_ARCH_DEFCONFIG=": coincide con un CONFIG_ARCH_DEFCONFIG=" cadena al inicio de la línea;
  • \K: descarta el anteriormente subcadena coincidente;

#1:

  • [^"]*: coincide con cualquier número de cualquier carácter que no " (avidez).

#2:

  • .*?: coincide con cualquier número de cualquier carácter (pereza);
  • (?="): lookahead (cero-longitud de la afirmación, no coincide con cualquier carácter); coincide si el siguiente carácter es un ".
% grep -Po '^CONFIG_ARCH_DEFCONFIG="\K[^"]*' /boot/config-4.2.0-16-generic
arch/x86/configs/x86_64_defconfig
% grep -Po '^CONFIG_ARCH_DEFCONFIG="\K.*?(?=")' /boot/config-4.2.0-16-generic
arch/x86/configs/x86_64_defconfig

10voto

Stewart Puntos 1385

Qué, no perl?

grep CONFIG_ARCH_DEFCONFIG /boot/config-3.19.0-32-generic | 
    perl -pe 's/.*?"([^"]*).*/$1/'

El perl le -print cada línea después de la aplicación de la secuencia de comandos dado por -e. El s/foo/bar/ sustituye foo con bar. Patrones en paréntesis son "capturados" y puede ser referido como $1, $2 ... $N donde $1 es la 1ª patrón capturado, $2 el segundo, etc. La expresión regular buscará todo hasta la primera cita (.*?"), luego de captura 0 o más no-" personajes ([^"]*) y luego todo lo demás. La cosa es reemplazado con la captura de patrón.

También puede salir de la coincidencia de patrón a perl:

perl -ne 's/.*CONFIG_ARCH_DEFCONFIG="([^"]*).*/$1/ && print' /boot/config-3.19.0-32-generic

10voto

heemayl Puntos 21116

Hay muchas maneras para que la piel este gato, aquí es un sed manera:

sed -nr 's/^CONFIG_ARCH_DEFCONFIG="([^"]+)"$/\1/p' /boot/config-3.19.0-32-generic

Aquí estamos de coincidencia de la línea y la captura de la parte deseada es decir, la porción dentro de las comillas dobles (([^"]+)) y, a continuación, la sustitución de toda la línea con el grupo capturado (\1).

Ejemplo:

% sed -nr 's/^CONFIG_ARCH_DEFCONFIG="([^"]+)"$/\1/p' /boot/config-3.13.0-32-generic
arch/x86/configs/x86_64_defconfig

8voto

Serg Puntos 17677

Aquí es una combinación de grep y cut, que hace el mismo trabajo.

$ grep "CONFIG_ARCH_DEFCONFIG" /boot/config-3.19.0-32-generic | cut -d"\"" -f2                                                
arch/x86/configs/x86_64_defconfig

Explicación:

  • grep "CONFIG_ARCH_DEFCONFIG" /boot/config-3.19.0-32-generic es la parte que se encuentra la línea, en la norma grep sintaxis:grep [OPTIONS] PATTERN [FILE...]. La salida pasa a través de la tubería a la siguiente etapa
  • cut -d"\"" -f2. En esta parte se utiliza la corte para recortar-off de texto separados por específica delimitador (el cual se especifica con -d flag). Tenemos que escapar de la doble cita con la barra invertida de modo que el shell permite tomar doble cita como una de las opciones a la cut de comandos, en lugar de la entrada a la propia concha. Ahora cut va a tratar de salida de grep separados por " y se divide en tres columnas, CONFIG_ARCH_DEFCONFIG, arch/x86/configs/x86_64_defconfig, y el espacio vacío. La línea que necesitamos es la segunda columna, eso significa que tenemos que usar -f2 flag.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: