我正在尝试将这些基本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]: $! / $?";
答案 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;
然后,您可以格式化内容并将其打印到最终文件中。