3 votos

¿Por qué no se asocia el patrón de sed como ' <tab> ¿personaje?

Tengo un archivo con algunas pestañas principales y he intentado convertir las pestañas a espacios usando 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 (hex 0x09) sino que lo trata como dos caracteres separados.

Grep maneja correctamente el atajo \ t para la pestaña.

5voto

Michael Zhou Puntos 167

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

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

Tampoco es \t tratado especial (como el carácter de tabulación) en el patrón.

Tiene 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"
 

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X