如何提取具有给定序列的行?

如何提取具有给定序列的行?

我试图找到一个命令,该命令仅从文本文件中提取所有字符按序列和顺序排列的行。

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...

相关内容