首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索模式并使用Perl替换文本文件中的完整行。

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

Stack Overflow用户
提问于 2014-08-20 03:40:50
回答 2查看 224关注 0票数 2

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

代码语言:javascript
复制
sed -i '/user_5/c\user_5|age-1|email5@sample.com|state-1' data.property

数据文件将如下所示。

代码语言:javascript
复制
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脚本中需要一个函数。这个要求的语法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-20 04:00:43

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

代码语言:javascript
复制
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脚本中执行此操作,请执行以下操作:

代码语言:javascript
复制
#!/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
EN

Stack Overflow用户

发布于 2014-08-20 04:00:53

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25396374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档