/ / Coincidencia con el primer carácter en cada línea (egrep UNIX) - expresiones regulares, macos, unix, grep

Coincidencia con el primer carácter en cada línea (egrep de UNIX) - expresiones regulares, macos, unix, grep

Estoy buscando coincidir y devolver sólo el primerocarácter de cada línea en un archivo codificado en utf-8 de texto sin formato que se utiliza en un terminal UNIX con egrep. Supuse que el siguiente comando egrep con un RegEx simple produciría el resultado deseado:

egrep -o "^." FILE.txt

Sin embargo, la salida parece coincidir y volver cada personaje en el archivo; es decir, se está comportando como si el comando fuera:

egrep -o "." FILE.txt

Resultados similares se producen con el siguiente comando,

egrep -o "^[a-z]" FILE.txt

a saber, los resultados actúan como si los RegEx "[a-z]" se suministraran (es decir, se comparen todos los caracteres ASCII en minúsculas en el rango a-z).

Los comandos en los que solo se proporciona un carácter alfanumérico específico parecen, como se esperaba, devolver cada línea que comienza con el carácter específico, por ejemplo,

egrep -o "^1" FILE.txt

o egrep -o "^ T" ARCHIVO.txt

devuelve todas las líneas que comienzan con "1" o "T", respectivamente.

He intentado pegar la totalidad del archivo en un probador RegEx, como en https://regexr.com/, y la expresión "^." de hecho, se comporta como se esperaba, así que no creo que mi archivo tenga más caracteres de espacio en blanco que puedan estar interfiriendo.

¿Hay algún otro comportamiento del metacarácter de inicio de línea "^" con egrep que podría estar causando este problema?

Respuestas

1 para la respuesta № 1

Esto es un error conocido en BSD grep y GNU grep 2.5.1-FreeBSD (también discutido aquí)

En -o modo, ^ el ancla no se maneja correctamente aquíparcheado aquí)

$ echo abc | bsdgrep -o "^."
a
b
c

ÑU grep en Linux se comporta como se espera:

$ echo abc | grep -o "^."
a

Relacionado con lo que intenta lograr aquí (imprima el primer carácter de cada línea), grep es una exageración. Un simple cut bastaría:

$ echo abc | cut -c1
a