Perl-在文件中添加/删除行号

Perl-在文件中添加/删除行号,perl,Perl,我目前正在编写一个Perl脚本,它需要在一个菜单中有一个选项,将行号预先添加到文件中,并有另一个选项删除这些行号 示例输出:“这是我的文件的第一行”应更改为“01-这是我的文件的第一行” 及 “01-这是我文件的第一行”应更改为“这是我文件的第一行” 我曾想过使用循环来实现这一点,但我觉得可能有一个更简单的解决方案。我应该如何着手解决这个问题?从命令行: 要按要求添加行号,请执行以下操作: perl -ne 'printf("%02d - ",$.);print' < file >

我目前正在编写一个Perl脚本,它需要在一个菜单中有一个选项,将行号预先添加到文件中,并有另一个选项删除这些行号

示例输出:
“这是我的文件的第一行”
应更改为
“01-这是我的文件的第一行”

“01-这是我文件的第一行”
应更改为
“这是我文件的第一行”

我曾想过使用循环来实现这一点,但我觉得可能有一个更简单的解决方案。我应该如何着手解决这个问题?

从命令行:

要按要求添加行号,请执行以下操作:

perl -ne 'printf("%02d - ",$.);print' < file > newfile
perl -pe 'printf("%02d - ",$.)' -i file
要删除行号,请执行以下操作:

perl -ne 's/^\d* - //;print' < newfile
perl -pe 's/^\d* - //' -i file
从命令行:

要按要求添加行号,请执行以下操作:

perl -ne 'printf("%02d - ",$.);print' < file > newfile
perl -pe 'printf("%02d - ",$.)' -i file
要删除行号,请执行以下操作:

perl -ne 's/^\d* - //;print' < newfile
perl -pe 's/^\d* - //' -i file

既然您想在脚本中使用它,我将在nirys的答案上进行扩展: 我不认为会有比使用循环更简单、更可维护的解决方案。一个带有
foreach
的示例:

sub addLinenumbersToFile {
    my($file) = @_;

    open my $in_handle, "<", $file;
    my @lines = <$in_handle>;
    close $in_handle;
    my $line_count = 1;
    foreach my $line (@lines) {
        # modify element directly:
        $line = sprintf("%02d - ", $line_count) . $line;
        $line_count++;
    }
    open my $out_handle, ">", $file;
    print $out_handle join('', @lines);
}

由于行号删除程序使用完全相同的格式,因此意外修改错误文件的可能性不大。如果在一行不匹配后退出该函数,则可以进一步减少它们。

因为您希望在脚本中使用该函数,我将在nirys上扩展答案: 我不认为会有比使用循环更简单、更可维护的解决方案。一个带有
foreach
的示例:

sub addLinenumbersToFile {
    my($file) = @_;

    open my $in_handle, "<", $file;
    my @lines = <$in_handle>;
    close $in_handle;
    my $line_count = 1;
    foreach my $line (@lines) {
        # modify element directly:
        $line = sprintf("%02d - ", $line_count) . $line;
        $line_count++;
    }
    open my $out_handle, ">", $file;
    print $out_handle join('', @lines);
}

由于行号删除程序使用完全相同的格式,因此意外修改错误文件的可能性不大。在一行不匹配后,可以通过退出函数来进一步减少它们。

您好,欢迎使用StackOverflow!我们希望您能向我们展示您的尝试,并与您合作。所以给它一个循环的镜头,这是正确的方法。如果你想不出来,用你试过的方法编辑问题。@sharks48线索
$。
s/^\d+/
;嗨,欢迎来到StackOverflow!我们希望您能向我们展示您的尝试,并与您合作。所以给它一个循环的镜头,这是正确的方法。如果你想不出来,用你试过的方法编辑问题。@sharks48线索
$。
s/^\d+/
;我想我应该把第一个文件作为
perl-pe'print“$.-”文件
@Sobrique,但是,请注意question@Sobrique,就-p标志而言,更短,同意。添加了带有@Sobrique注释(-p)的更新部分,我想我会将第一个放在
perl-pe'print“$”中'文件
@Sobrique,我会这样做,但是请注意question@Sobrique,就-p标志而言,更短,同意。添加了带有@Sobrique注释的更新部分(-p)