perl:如何从文件中读取所有行并打印为一行文本

时间:2010-06-30 23:25:10

标签: perl string file

我试图在不使用CPAN的情况下返回用\ n替换换行符的文件的输出

这是我到目前为止所拥有的

#! /usr/local/bin/perl 

if ( $#ARGV = "1" )     {
    print "$ARGV[0]\n";

    my $file = "$ARGV[0]";
    my $document = do {
        local $/;
        open my $fh, "<", $file
          or die "could not open $file: $!";
        <$fh>;
    };
    print "Doc: $document\n";
}

4 个答案:

答案 0 :(得分:3)

while(<>) {chomp;print;print '\n';}

答案 1 :(得分:1)

你可以使用slurp模式(不再需要while循环)和一些regexp:

print map { $_ =~ s/\n/\\n/; $_ } (<>); 

或一些特殊变量:

my @a = <>;
$\ = $, = '\n';
chomp @a;
print @a;

($ \是输出记录分隔符,$是输出字段分隔符。两者都适用于打印操作符)

答案 2 :(得分:0)

我试过了......

#! /usr/bin/perl 

if ( $#ARGV = "1" )     {
open FILE, "<", "$ARGV[0]" or die $!;
chomp $_;
@chars = map ({ $_ =~ s/\n/\\n/; $_ } (<FILE>)); 
print @chars;
print "@chars\n";
}

..它给了我正确的输出(除了我需要学习如何剥离的一些空格)

答案 3 :(得分:0)

为清晰起见,这是一个很长的解决方案。简而言之,chomp将删除所有尾随空格和控制字符。

#!/usr/bin/perl

use strict;
use warnings;

my $filename = shift;
my @contents;
my $lines = 0;

if (! -e $filename) {
    print "Please provide a valid filename\n";
    exit;
}

print "Examining $filename\n";

open(FILE, "<$filename");

while (<FILE>) {
    chomp();
    push(@contents, $_);
    print ".";  
    $lines++;
    if ($lines % 10 == 0) {
        print "\n";
    }
}
close(FILE);

print "done\n";

foreach (@contents) {
    print "$_";
}

print "\n";