用空格替换制表符的Perl程序

时间:2011-05-13 20:28:58

标签: perl text file replace

我想编写一个Perl单行代码,用空格替换当前目录中一批文本文件中的所有选项卡'\ t',对可见间距没有影响。

有人能告诉我怎么做吗?

6 个答案:

答案 0 :(得分:22)

这是FAQ

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

或者您可以使用Text::Tabs模块(标准Perl发行版的一部分)。

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

答案 1 :(得分:13)

您不需要使用Perl单线程,您可以使用expand代替:

  

expand 实用程序应将文件或标准输入写入标准输出,并将字符替换为填充到下一个制表位所需的一个或多个字符。

expand实用程序甚至会为您管理制表位,这似乎是您“对可见间距没有影响”要求的一部分,Perl单行可能不会(但是我敢打赌,这里有人可以提供一个单行程。)

答案 2 :(得分:6)

使用Text::Tabs。以下内容仅适用于文档:

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

答案 3 :(得分:5)

perl -p -i -e 's/\t/ /g' file.txt是实现此目的的一种方式

答案 4 :(得分:1)

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

答案 5 :(得分:0)

您可以使用s///来实现此目的。也许你有一行存储在$ line中的文字:

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

这应该用四个空格替换每个标签(\t)。它只取决于文件中一个标签的空格。

这是应该很快为你做的事情;编辑它你将如何。

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);