如何将sed命令合并到perl脚本中?

时间:2019-01-09 15:03:02

标签: perl sed

我正在尝试将这些基本sed命令合并到我的perl脚本中。

sed "1,$s/^/20181230,/g" usd_jan_ora.txt > u2_1231.txt
sed "1,$s/,2018-12-3[0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]+0000//g" u2_1231.txt > u3_1231.txt
sed "1,$s/\([A-Z][A-Z][A-Z]\),[0-9]*\.[0-9][0-9][0-9][0-9]/\1/g" u3_1231.txt > u4_1231.txt

尽管有很多关于此的文章,但是我还是perl的新手,我很难将这些答案转化为我的特定问题。

到目前为止,我已经编写了此脚本来导航到url并将网页下载为txt文件。现在,我需要将此文本文件编辑为下一步所需的格式。

use strict;
use warnings;
use HTML::FormatText;
use LWP::Simple;


my      $dateField = 'date=2018-12-31';
my      $currency  = "USD";
my      $filename = 'C:\Users\My.Name\Downloads\doc3.txt';
my      $address = "my.url";
my      $content = get($address);

my $s = 1;

defined $content or die "Cannot read '$address': $!";

my $string = HTML::FormatText->format_string
(
    $content,
    leftmargin  =>  5,
    rightmargin => 75,
);

open(my $file, '>', $filename) or die $!;
print $file $string;

my $cmd = "sed '1,$s/^/20181230,/g' doc3.txt > test.txt";

print "Launching [$cmd]\n";

system($cmd) == 0
    or die "Couldn't launch [$cmd]: $! / $?";

1 个答案:

答案 0 :(得分:0)

好的,所以您的sed命令正在更改文本的长度,因此,您确实需要在格式化输出之前进行更改,因此,实际上需要在defined $content ...my $string ...行之间进行更改。

sed命令在文档的每一行都进行了多项选择。可以通过从sed regex到Perl regex的一些调整直接在Perl中完成

$content =~ s/^/20181230,/gm; # The m option makes ^ match at the start of each line
$content =~ s/,2018-12-3[0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]\+0000//g;
$content =~ s/([A-Z][A-Z][A-Z]),[0-9]*\.[0-9][0-9][0-9][0-9]/$1/g;

然后,您可以格式化内容并将其打印到最终文件中。