Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用空格替换制表符的Perl程序_Perl_Text_File_Replace - Fatal编程技术网

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

用空格替换制表符的Perl程序,perl,text,file,replace,Perl,Text,File,Replace,我想编写一个Perl one liner,将当前目录中一批文本文件中的所有制表符“\t”替换为空格,而不影响可见间距 有人能告诉我怎么做吗?perl-p-i-e的/\t//g'file.txt将是实现这一点的一种方法您不需要perl单行程序,您可以使用: $ perl -wp -i.backup -e 's/\t/ /g' * 扩展实用程序应将文件或标准输入写入标准输出,并用一个或多个字符替换字符,以填充到下一个制表位 expand实用程序甚至可以为您管理制表位,这似乎是“对可见间距没有

我想编写一个Perl one liner,将当前目录中一批文本文件中的所有制表符“\t”替换为空格,而不影响可见间距


有人能告诉我怎么做吗?

perl-p-i-e的/\t//g'file.txt将是实现这一点的一种方法

您不需要perl单行程序,您可以使用:

$ perl -wp -i.backup -e 's/\t/    /g' *
扩展实用程序应将文件或标准输入写入标准输出,并用一个或多个字符替换字符,以填充到下一个制表位

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

这是:

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

使用。以下内容仅从文档中稍作修改:

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

您可以使用
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);
open(FH,'tabz.txt');
我的@new;
foreach我的$line(){
$line=~s/\t//g;#在此处添加空格!
推送(@new$line);
}
关闭(FH);
打开(FH,'>new.txt');
每小时打印费(FH$)(@new);
关闭(FH);

在regexp的replace部分,您可能需要比replace部分更多的空间,但如果您有一个expand实用程序可以做到这一点,那也没关系!我想你是在Unix世界:在Windows中,expand.exe做了一些完全不同的事情。谢谢!我对其进行了调整,以将文件规范化为unix行结尾,并消除尾随空格:
perl-MText::Tabs-ni-e的/\s*$/;s/\s*\r/\n/g;打印扩展$\“\n”
$line =~ s/\t/    /g;
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);