tengo una linea llamada
10909101 - testingName - Log8767, File787 - 8:50PM
Ahora solo quiero usar grep testingName
como resultado.
El primer número puede variar en términos de número de dígitos (otra línea puede tenerse 12
a sí misma como primer número), por lo que no puedo usar ningún grep basado en números. Entonces, ¿cómo soluciono esto?
Respuesta1
Dado que todos los datos tendrán el mismo formato, grep
no es la herramienta adecuada para ello. Es utilizable, sin duda, pero usarlo es una chapuza: no grep
fue diseñado para esto y es una herramienta mucho mejor awk
.
Dado que su delimitador siempre será una secuencia de "espacio, guión, espacio", es decir -
, puede hacer esto:
$ awk -F' - ' '{print $2}' <filename>
¿Dónde <filename>
está el nombre del archivo con los datos que está buscando y obtendrá todas las líneas del archivo completo recortadas solo a la segunda entrada? Si no te gusta usar un delimitador de tres caracteres, puedes hacer esto:
$ awk -F- '{print $2}' | tr -d ' '
que simplemente toma todo, desde el primero -
hasta el segundo, incluidos los espacios, y los elimina mediante tr
. Por supuesto, si tiene espacios en los nombres de sus archivos, eso causaría problemas y querrá seguir con el primer ejemplo.
Respuesta2
Esto usadoscasos de grep
, peroespuro grep
:
echo '10909101 - testingName - Log8767, File787 - 8:50PM ' | \
grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*'
Producción:
testingName