모든 숫자, 모든 문자 및 문자가 포함된 줄이 포함된 큰 텍스트 파일이 있고 여기에도 숫자, 문자 및 문자가 포함된 줄이 포함되어 있습니다. 마지막 또는 마지막 두 문자를 제외하고 포함된 모든 숫자를 인쇄하고 싶습니다. .
숫자로 시작하지만 마지막 문자 또는 숫자가 아닌 마지막 두 문자로 끝나는 줄을 인쇄합니다. 예를 들어
1234567a 2245678902da A1234566d 12345678abc
출력은 다음과 같아야 합니다.
1234567a 22345678902da
첫 번째 문자를 제외한 모든 문자가 숫자인 줄이나 첫 번째와 두 번째 문자가 숫자가 아닌 줄을 인쇄합니다. 예를 들어
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