편집하다

편집하다

하나 이상의 인스턴스를 포함하지만 다른 숫자는 포함하지 않는 파일의 행을 찾으려고 합니다 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

awkgrep이보다 더 편리 할 수도 있습니다 . 필드 구분 기호를 숫자가 아닌 연속 문자로 설정한 다음 필드를 반복하고 비어 있지 않은 각 필드가 정확히 다음과 같은 경우에만 줄을 인쇄합니다.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

관련 정보