Quiero limpiar un archivo de patrón para su uso posterior, por lo que solo la primera y la segunda palabra (o número) son relevantes. Tengo esto: pattern.txt # Este es un patrón de prueba some_variable one # placeholder ...

1
glades 14 mar. 2021 a las 19:21

3 respuestas

La mejor respuesta

Basado completamente en las muestras que se muestran únicamente, esto se puede hacer fácilmente con awk. Escrito y probado con GNU awk, debería funcionar con cualquier awk.

awk '{sub(/\r$/,"")} NF && !/^#/{print $1,$2}'  Input_file

<×Explanation: Simplemente verifica 2 condiciones aquí. 1st- NF que asegura que la línea NO sea una línea vacía. 2nd- La línea NO comienza con #, luego imprime la primera y segunda columna de la línea actual.



Con sed: intente seguir en GNU sed.

sed -E 's/\r$//;/^#/d;/^\s*$/d;s/^ +//;s/([^ ]*) +([^ ]*).*/\1 \2/' Input_file

O según los comentarios de Ed sir use lo siguiente:

sed -E 's/\r$//; /^#/d; /^\s*$/d; s/^\s+//; s/(\S*)\s+(\S*).*/\1 \2/' Input_file

La salida de muestra es la siguiente para las dos soluciones anteriores:

some_variable one
some_other_var 2
different_var "hello"
var_after_newlines 18
3
RavinderSingh13 14 mar. 2021 a las 17:17

En GNU sed

sed -E '/^\s*(#.*)?$/d; s/^\s*(\S+)\s+(\S+).*/\1 \2/' pattern.txt
2
M. Nejat Aydin 14 mar. 2021 a las 16:39

Versión que debería funcionar con la mayoría de sed:

$ sed 's/^[[:space:]]*//; s/#.*//; /^$/d; s/^\([^[:space:]]\{1,\}\)[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*/\1 \2/' pattern.txt
some_variable one
some_other_var 2
different_var "hello"
var_after_newlines 18
1
Shawn 14 mar. 2021 a las 16:59