perl +在文件中的两行之间附加文本

时间:2010-08-11 13:01:19

标签: perl

我需要编辑文件,主要问题是在文件中的两个已知行之间附加文本

例如我需要附加以下文字

a b c d e f

1 2 3 4 5 6

bla bla

在first_line和second_line之间

first_line=")"

second_line="NIC Hr_Nic ("

备注:first_line和second_line参数可以获取任何行或字符串

如何通过perl执行此操作? (我编写bash脚本,我需要在我的脚本中插入perl语法)

利迪娅

3 个答案:

答案 0 :(得分:0)

很好地连接你做的字符串

my $text = $first_line . $second_line;

my $text = $first_line;
$text .= $second_line;

答案 1 :(得分:0)

您可以将文件作为单个字符串读取,然后使用正则表达式进行搜索和替换:

use strict;
use warnings;

# Slurp file myfile.txt into a single string
open(FILE,"myfile.txt") || die "Can't open file: $!";
undef $/;
my $file = <FILE>;

# Set strings to find and insert
my $first_line = ")";
my $second_line = "NIC Hr_Nic (";
my $insert = "hello world";

# Insert our text
$file =~ s/\Q$first_line\E\n\Q$second_line\E/$first_line\n$insert\n$second_line/;

# Write output to output.txt
open(OUTPUT,">output.txt") || die "Can't open file: $!";
print OUTPUT $file;
close(OUTPUT);

By unsetting $/ we put Perl into "slurp mode"因此可以轻松地将整个文件读入$file

我们使用the s/// operator进行搜索,并使用我们的两条搜索行替换为模式。

\Q\E告诉Perl转义它们之间的字符串,即忽略碰巧在$first_line$second_line中的任何特殊字符。

如果需要,您可以始终在原始文件上写入输出。

使用the -i command line option无法解决问题,因为此选项一次处理一行文件;在两条特定行之间插入文本,您需要一次了解两行。

答案 2 :(得分:0)

我不确定我是否理解你的问题。我认为,文件内容的“之前和之后”示例会更容易。无论如何,这是我对它的看法,使用拼接而不是正则表达式。我们当然必须知道这个号码的行号。

将文件加载到数组中:

my @lines;
open F, '<', 'filename' or die $!;
push @lines, $_ for <F>;
close F;

插入内容(请参阅perldoc -f splice):

splice @lines, 1, 0, ('stuff');

..你已经完成了。您现在需要做的就是再次保存数组:

open F, '>', 'filename' or die $!;
print F @lines;
close F;