Perché la combinazione di modelli sed non considera "\ t" come un carattere di tabulazione?

1

Ho un file con alcune schede iniziali e ho provato a convertire le schede in spazi usando sed:

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

Funziona correttamente con vari tipi di UNIX, ma sul mio Mac (Sierra) non tratta '\ t' come una escape per tab (hex 0x09), ma lo tratta come due caratteri separati.

grep gestisce correttamente il collegamento \ t per la scheda.

    
posta jmhindle 16.06.2017 - 18:16
fonte

1 risposta

4

BSD sed segue lo standard POSIX per BRE , vedere man 7 re_format . In particolare il seguente:

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

Nor è \t trattato speciale (come carattere tab) nel pattern.

Hai le seguenti opzioni:

# 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"
    
risposta data 16.06.2017 - 21:17
fonte

Leggi altre domande sui tag