如何用perl语言替换文件中的字符串

时间:2016-03-16 11:19:14

标签: regex perl perl-data-structures

例如输入文件是

ID Name Dept_id
1 aaa 1
2 ddd 1
3 sss 2

它是制表符分隔文件

输出将像

ID Name Dept_id
1 aaa 1.1
2 ddd 2.1
3 sss 3.2

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

while (<>) {
    s/^(\d+)\s\S+\s\K(\d+)/$1.$2/;
} continue {
    print;
}

在perl代码中,程序看起来像这样:

\d+

替换正则表达式查找以一个或多个数字\s开头的行,并用括号捕获它们,然后是空格\S+,非空格\K,再次是空格,然后是数字,我们也捕获。 .(保持)表示我们不希望更改左侧的任何内容。然后我们用第一个捕获的字符串替换它,句点curl -XPUT localhost:9200/_template/my_template -d '{ "template" : "logstash-*", "settings" : { "number_of_shards" : 1 }, "mappings" : { "my_type" : { "properties": { ... } } } }' 和第二个捕获的字符串。

答案 1 :(得分:2)

您想在ID中添加dept_id号码。因此,迭代文件的while循环。

然后使用chomp删除换行符。

然后split将每一行按空格或制表符分隔成数组,然后使用数组索引打印数组。

您的$ar[0]拥有该ID。所以用$ar[0].$ar[2]

打印
open my $handler, "<","file.txt";
my $first = <$handler>;
print "$first";
while (<$handler>)
{
    chomp;
    my @ar = split(/\s+/);
    print "$ar[0]\t$ar[1]\t$ar[0].$ar[2]\n";

}

或者只是尝试一下

-n循环输入文件。然后$.告诉当前行号。

然后我在这里使用了模式匹配。

我创建了名为$on $tw $th的临时列表。 $on保存ID,$tw保存名称,$th保存Dept_id。然后它将通过打印"$on\t$tw\t$on.$th"

给出
perl -ne 'if($. == 1){ print "$_"; next;} ($on,$tw,$th)= $_ =~m/(\w+)/g; print "$on\t$tw\t$on.$th\n";' file.txt