我试图找到一个命令,该命令仅从文本文件中提取所有字符按序列和顺序排列的行。
800900100011001200..(降100) 369121518(升3)
我可以在一个命令中执行此操作,以仅打印仅具有上述命令的行,或者必须为每个序列创建一个命令吗?
答案1
一种方法是使用 的perl
实验(??{...})
性正则表达式运算符来处理线性序列中 3 个或更多十进制数字的序列:
perl -lne 'print if m{^(\d+)(\d+)(?=(.+$))(??{
my $i = $2; my $r; my $l = length $3; my $incr = $2 - $1;
while (length($r) < $l) {$i += $incr; $r .= $i}; $r})$}'
请注意,它报告的000000
是 0000, 0, 0 或 0, 0, 0, 0, 0, 0,也报告的1023
是 1, 02, 3,但是它的工作方式,而不是1203
它的工作方式,对于前 2 个数字之后的部分,它需要一个不带前导 0 的数字列表。
同样,它报告10-1
,但不像前两个数字中预期的那样-101
。-
你可以用以下方法解决这个问题:
perl -lne 'print if m{^(-?\d+)(-?\d+)(?=(.+$))(??{
my $i = $2; my $r, $sign, $value; my $m = $3; my $incr = $2 - $1;
while (($i += $incr),
(($sign, $value) = ($i =~ /(-?)(\d*)/)),
$m =~ /^(${sign}0*$value)(.*)/) {
$r .= $1; $m = $2;
}; $r})$}'
它将报告12000034
, -101
, -1-2-3
, 0-123-246
...