하나 이상의 인스턴스를 포함하지만 다른 숫자는 포함하지 않는 파일의 행을 찾으려고 합니다 1234
(숫자가 아닌 문자는 허용됨). 다른 숫자를 사용하면 행이 일치하지 않게 됩니다.
유효한 예:
1234
1234 xxx
xxx 1234
1234 1234
1234 xxx 1234
잘못된 예:
12341234
12345
1234xxx345
1234 345
1234xxx
xxx1234
1234xxx1234
이것이 내가 사용한 것입니다:
grep -E '^([^0-9]*1234)+[^0-9]*$' file.txt
하지만 이 명령은 유효한 12341234도 출력합니다. 이를 방지하려면 어떻게 해야 합니까?
답변1
awk
grep
이보다 더 편리 할 수도 있습니다 . 필드 구분 기호를 숫자가 아닌 연속 문자로 설정한 다음 필드를 반복하고 비어 있지 않은 각 필드가 정확히 다음과 같은 경우에만 줄을 인쇄합니다.1234
awk -F'[^[:digit:]]+' '{
for(i=1; i<=NF; ++i)
if (($i) && ($i != 1234)) next
}; {print}' file.txt
답변2
grep -E '^[^0-9]*1234([^0-9]+1234)*[^0-9]*$' file.txt
설명하다
^[^0-9]*1234
: 첫 번째 일치 항목이 발견되었습니다1234
. 앞에 숫자가 아닌 문자가 올 수 있습니다.([^0-9]+1234)*
: 추가 반복이 있을 수 있지만 숫자가 아닌 문자로1234
첫 번째(및 다른 반복)와 구분되어야 합니다1234
(따라서 사용).1234
+
[^0-9]*$
: 전체 줄(밴드$
)과 일치합니다. 끝 뒤에 숫자가 아닌 문자가 있을 수 있습니다1234
(그러나 반드시 그런 것은 아닙니다*
).
편집하다
1234
공백(또는 줄의 시작이나 끝)으로 구분해야 하는 경우 다음을 사용하세요.
grep -E '^([^0-9]* )?1234(( [^0-9]*)? 1234)*( [^0-9]*)?$'
설명하다
^([^0-9]* )?
: 공백으로 끝나는 한 숫자가 아닌 문자로 시작할 수 있습니다.1234
: 첫 번째 (필수) 일치 항목이 발견되었습니다1234
.(( [^0-9]*)? 1234)*
: 대괄호를 거꾸로 반복하겠습니다. 추가 복사본이 (0개 이상) 있을 수 있지만1234
앞에는 공백이 있어야 합니다(예: )1234
. 이 공백 앞에는 숫자가 아닌 문자가 있을 수 있습니다. 단, 이러한 문자는1243
다른 공백(예: )으로 이전 복사본과 구분되어야 합니다( [^0-9]*)?
.( [^0-9]*)?$
: 앞에 공백이 있으면 끝에 숫자가 아닌 문자를 사용할 수 있습니다.
답변3
숫자 검색 의 시작 또는 앞에 ^
숫자가 아닌( )이 있고 [^0-9]
, 끝( $
또는 [^0-9]
)에 있습니다.
grep -E '(^|[^0-9])1234($|[^0-9])' file.txt
앞에 0을 허용하려면 0*
숫자 앞에 추가하세요.
grep -E '(^|[^0-9])0*1234($|[^0-9])' file.txt
해당 특정 숫자 발생의 일부가 아닌 일련의 숫자가 포함된 행도 거부하려면 해당 특정 숫자와 번갈아 나타나는 하나 이상의 숫자가 아닌 시퀀스로 구성된 행을 찾아야 합니다. , 즉 기본적으로 ([^0-9]+1234)*
. 줄은 숫자나 숫자가 아닌 문자로 시작하고 끝날 수 있으며, 숫자가 아닌 숫자의 내부 시퀀스는 비워둘 수 없습니다. 또한 행에는 숫자가 한 번 이상 포함되어야 합니다. 함께 넣어보세요:
grep -xE '[^0-9]*1234([^0-9]+1234)*[^0-9]*' file.txt