마지막이나 마지막 두 문자 또는 첫 번째나 두 번째 문자를 제외한 모든 숫자가 포함된 줄만 인쇄합니다.

마지막이나 마지막 두 문자 또는 첫 번째나 두 번째 문자를 제외한 모든 숫자가 포함된 줄만 인쇄합니다.

모든 숫자, 모든 문자 및 문자가 포함된 줄이 포함된 큰 텍스트 파일이 있고 여기에도 숫자, 문자 및 문자가 포함된 줄이 포함되어 있습니다. 마지막 또는 마지막 두 문자를 제외하고 포함된 모든 숫자를 인쇄하고 싶습니다. .

  1. 숫자로 시작하지만 마지막 문자 또는 숫자가 아닌 마지막 두 문자로 끝나는 줄을 인쇄합니다. 예를 들어

    1234567a
    2245678902da
    A1234566d
    12345678abc
    

    출력은 다음과 같아야 합니다.

    1234567a
    22345678902da
    
  2. 첫 번째 문자를 제외한 모든 문자가 숫자인 줄이나 첫 번째와 두 번째 문자가 숫자가 아닌 줄을 인쇄합니다. 예를 들어

    A1234
    Ab1234
    1a1234
    Abc1234
    

    출력은 다음과 같아야 합니다.

    A1234
    Ab1234
    

감사해요

답변1

$ grep -Ex '[[:digit:]]+(.|[^[:digit:]]{2})' file1
1234567a
2245678902da

확장 정규 표현식은 [[:digit:]]+(.|[^[:digit:]]{2})하나 이상의 숫자 뒤에 지정되지 않은 문자 또는 두 개의 숫자가 아닌 숫자가 오는 것과 일치합니다(사양의 문자 그대로 해석은 "숫자로 시작하지만마지막 문자 또는 숫자가 아닌 마지막 두 문자로 끝남"). 이 -x옵션을 사용 grep하면 일치 항목이 전체 줄에 걸쳐 표시됩니다.

지정한 내용의 리터럴 해석은 다음을 포함하는 행과도 일치합니다.오직숫자.

그리고

$ grep -Ex '[^[:digit:]]{1,2}[[:digit:]]+' file2
A1234
Ab1234

하나 또는 두 개의 숫자가 아닌 숫자로 시작하고 줄 끝까지 하나 이상의 숫자를 포함하는 줄을 일치시킵니다.


두 정규식의 시각적 표현(사용 방법도 표시 sed):

첫 번째:

$ sed -nE 's/^([[:digit:]]+)(.|[^[:digit:]]{2})$/(\1)(\2)/p' file1
(234567)(a)
(2245678902)(da)

두번째:

$ sed -nE 's/^([^[:digit:]]{1,2})([[:digit:]]+)$/(\1)(\2)/p' file2
(A)(1234)
(Ab)(1234)

해결책은 명령에서 모든 괄호를 제거하여 sed찾을 수 있습니다 .sed

답변2

설명이 약간 다릅니다. 마지막 1-2자는 숫자가 될 수 없기 때문에 이것을 읽었습니다.

grep -E '^[[:digit:]]+[^[:digit:]]{1,2}$' file
1234567a
2245678902da

답변3

아래 첫 번째 질문에 대한 명령은 다음과 같습니다.

sed -n '/^[0-9]*[a-z]\{,2\}$/p' filename

산출

1234567a
2245678902da

아래 두 번째 질문에 대한 명령은 다음과 같습니다.

 sed -n '/^[A-Za-z]\{1,2\}[0-9]*$/p'

산출:

A1234
Ab1234

관련 정보