搜索模式并使用Perl替换文本文件中的整行

时间:2014-08-20 03:40:50

标签: perl

我需要一个函数来搜索文本文件中的模式,并用另一个字符串替换整行。 sed的等效函数如下所示。

sed -i '/user_5/c\user_5|age-1|email5@sample.com|state-1' data.property

数据文件如下所示。

user_1|age-1|email1@sample.com|state-1
user_5|age-1|email5@sample.com|state-5
user_4|age-4|email4@sample.com|state-4

Perl脚本中需要一个函数。这个要求的语法是什么?

2 个答案:

答案 0 :(得分:1)

您可以在命令行上使用以下Perl代码:

perl -i.bak -lpe '$_ = q(user_5|age-1|email5@sample.com|state-1) if /^user_5/' file

<强>解释

  • -i:就地更改。 .bak允许您将原始文件保留为备份。
  • -l:点击换行符并在打印过程中将其放回。
  • -p:创建隐式while(<>) { print }循环。
  • -e:告诉Perl执行其后的代码。

在Perl脚本中执行此操作:

#!/usr/bin/perl
use strict;
use warnings;
use autodie;

my $file = "file";  # Path to your file

local @ARGV = $file;
local $^I = '.bak';

while (<>) {
    print and next unless /^user_5/;
    print q(user_5|age-1|email5@sample.com|state-1), "\n";
}

#unlink "$file$^I";  # Uncomment if you don't want a backup

答案 1 :(得分:0)

perl -lne 'if (/user_5/) { print "user_5|age-1|email5\@sample.com|state-1" } else { print }'是一种方法。