Una especie de gato invertido

Tengo dos documentos que son el resultado de consultas SQL.

Por ejemplo, tengo mi Doc1.lst que es:

John1 0 Julien 10 Jules3 0 Julie 30 

En este Doc1.lst, utilicé sed para tener solo la parte del nombre, por lo que Doc2.lst es:

  John1 Julien Jules3 Julie 

No domino lo suficiente el command sed para capturar solo los numbers, por lo que me gustaría saber si hay una manera de crear un Doc3.lst que tome el Doc1.lst y elimine el contenido de Doc2.lst

Sería una especie de cateneo invertido. Por cierto, si tienes el command sed para atrapar solo los numbers que serían geniales.

Para get la salida que desea, puede usar awk , cut o sed . El primero es preferible.

Si su file Doc1.lst es como sigue

 John1 0 Julien 10 Jules3 0 Julie 30 

El siguiente command awk obtendrá el resultado que desee. Suponiendo que el separador de campo es un espacio.

awk '{print $1}' Doc1.lst

Usando cut

 cut -d' ' -f1 Doc1.lst 

O usando sed . Nota. sed es un editor de flujo y no desea usar sed para esta tarea. Pero aquí está la línea que quieres de todos modos.

sed 's/\([a-zA-Z]*\).*/\1/' Doc1.lst

awk '{print $1}' Doc1.lst > Doc3.lst

 tr -s '[:space:]' \\n <infile | grep '^[0-9]' 

…o…

 sed '/^[0-9]/P;y| |\n|;D' <infile 

… o probablemente solo …

 sed 's/.* //' <infile 

… aunque para la última, es posible que desee hacer s/ *$// primero en caso de que haya espacios en blanco al final.

De manera más general, puedes enumerar un grupo con sed

 sed 's/ *[^ ]\{1,\} *//' <infile 

… escrito así eliminaría de una línea el primer grupo de personajes no espaciales y todos los espacios circundantes, lo que te dejaría con los numbers. Sin embargo…

 sed 's/ *[^ ]\{1,\} *//2' <infile 

… en cambio, haría lo mismo con el segundo grupo no espacial por línea, lo que te dejaría solo con los nombres.