¿Por qué el patrón de coincidencia de patrones no trata '\ t' como un carácter de tabulación?

1

Tengo un archivo con algunas pestañas iniciales e intenté convertir las pestañas en espacios mediante sed:

cat test_file | sed -e 's/[\t]/    /g'

Funciona correctamente en varios sabores de UNIX, pero en mi Mac (Sierra) no trata '\ t' como un escape para la pestaña (hexadecimal 0x09), sino que lo trata como dos caracteres separados.

grep maneja correctamente el acceso directo \ t para la pestaña.

    
pregunta jmhindle 16.06.2017 - 18:16

1 respuesta

4

BSD sed sigue el estándar POSIX para BRE 's, vea man 7 re_format . En particular los siguientes:

                                             all other special charac-
 ters, including '\', lose their special significance within a bracket
 expression.

Tampoco se trata a \t especial (como el carácter de tabulación) en el patrón.

Tienes las siguientes opciones:

# Type a literal tab in the /pattern/ with the keys <control><v><tab>
's/<control><v><tab>/    /g'

# Use a character class within the bracket expression
's/[[:cntrl:]]/    /g'

# Use ansi -c quoting
$'s/\t/    /g'

# Print the tab with printf
"s/$(printf '\t')/    /g"
    
respondido por el fd0 16.06.2017 - 21:17

Lea otras preguntas en las etiquetas