주어진 시퀀스로 행을 추출하는 방법은 무엇입니까?

주어진 시퀀스로 행을 추출하는 방법은 무엇입니까?

모든 문자가 순서대로 포함된 텍스트 파일에서 줄만 추출하는 명령을 찾으려고 합니다.

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})$}'

0000000000, 0, 0 또는 0, 0, 0, 0, 0, 0을 보고 하고 10231, 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... 을 보고합니다.

관련 정보