2011-05-13 10 views

Respuesta

22

Esto está en FAQ:

1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; 

O simplemente puede utilizar el módulo Text::Tabs (parte de la distribución estándar de Perl).

use Text::Tabs; 
@expanded_lines = expand(@lines_with_tabs); 
+5

+1: 'perldoc -q tab' – toolic

5

perl -p -i -e 's/\t/ /g' file.txt sería una manera de hacer esto

+0

Probablemente desee más espacio que uno en la parte de reemplazo de la expresión regular, aunque –

+0

true - lo cambió. – kuriouscoder

1
$ perl -wp -i.backup -e 's/\t/ /g' * 
12

No es necesario un Perl de una sola línea para esto, se podía utilizar en lugar expand:

El de utilidad deberá ampliar escribir archivos o la entrada estándar a la salida estándar con caracteres reemplazados con uno o más caracteres necesarios para acceder a la siguiente tabulación.

La utilidad expand incluso se encargará de la gestión de pestaña se detiene para usted y que parece ser parte de su requerimiento "sin efecto sobre el espacio visible", un Perl de una sola línea, probablemente would't (pero apostar que alguien aquí podría proporcionar una línea que lo haría).

+3

está bien ** si ** tiene una utilidad * expand * que hace esto! Supongo que estás en el mundo de Unix: en Windows * expand.exe * hace algo bastante diferente. – AAT

6

Usar Text::Tabs. La siguiente información sólo se adapta muy ligeramente de la documentación:

perl -MText::Tabs -n -i.orig -e 'print expand $_' * 
+0

¡Gracias! Lo adapté para también normalizar el archivo a finales de línea de Unix y para eliminar espacios en blanco al final: 'perl -MText :: Tabs -ni -e 's/\ s * $ //; s/\ s * \ r/\ n/g; imprimir expand $ _, "\ n" '' –

0

Puede utilizar s/// para lograrlo. Tal vez usted tiene una línea de texto almacenados en línea $:

$line =~ s/\t/ /g; 

Esto debe reemplazar cada pestaña (\t) con cuatro espacios. Solo depende de cuántos espacios hay una pestaña en su archivo.

Aquí hay algo que debería hacerlo bastante rápido para usted; edítalo como quieras.

open(FH, 'tabz.txt'); 

my @new; 

foreach my $line (<FH>) { 
    $line =~ s/\t/ /g; # Add your spaces here! 
    push(@new, $line); 
} 

close(FH); 

open(FH, '>new.txt'); 
printf(FH $_) foreach (@new); 
close(FH); 
Cuestiones relacionadas