regex - 如何用 Perl 中的另一组替换文件中的一组单词?

标签 regex perl

我的要求是用第二组单词替换给定文本文件中的一组单词,这可能是从命令行或另一个文件中给出的。想要使用 Perl 来执行此操作,因为我的其余代码也在 Perl 中。

所以,如果我有以下内容:

server name="${server1}" host="abc.com"
server name="${server2}" host="webcs.com"
server name="${server5}" host="httpvcs1.com"
server name="${server6}" host="xyz.com"
server name="${server7}" host="msg.com"

我想用一组不同的词替换字符串“server1”、“server2”、“server5”等。这些可以放在另一个文件中或从命令行给出(以更可行的为准)。

此外,如果我想用"file"替换“服务器”一词,而不仅仅是“server1”、“server2”等,我将如何为这个替换制作一个正则表达式?

perl -pie 's/server\d{1-3}/myword/g' loginOut.txt > loginOut1.txt

以上将用“myword”替换所有单词。但我只想替换子字符串。

最佳答案

第二个问题的正则表达式是 s/server/myword/g;。匹配(并替换)任何出现的“服务器”。

要用不同的字符串替换 server1、server2 等,您可以有一个包含替换规则的文本文件,例如:

server1 abcd
server2 bcde
server3 cdef
etc.

例如,您可以将文件中的日期读入哈希,

my %dict;
while(<DICTFILE>){
    /(\S+)\s+(\S+)/;
    $dict{$1}={$2};
}

然后进行替换:

while(my $line = <>){
    foreach my $s (keys %dict){
        $line =~ s/$s/$dict{$s}/g;
    }
    print $line;
}

关于regex - 如何用 Perl 中的另一组替换文件中的一组单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351784/

相关文章:

Python慢​​读性能问题

regex - 使用 Perl 正则表达式查找和提取多行匹配项

c# - 替换字符串中第一次出现的模式

Javascript:是否可以附加正则表达式?

php - 正则表达式。如何在一行中处理所有 HTML 标签?

mysql - 返回 MySQL 数据时遇到问题

perl - 有没有办法查看 AnyEvent 事件队列

java - 解析 html 中的分页。使用jsoup

php - 如何排除其中的目录和文件 - 重写

perl - 为什么 Perl 的自动激活在这种情况下起作用?