sed에서 정규식 {m,n}의 출력을 디코딩하는 중에 문제가 발생했습니다.

sed에서 정규식 {m,n}의 출력을 디코딩하는 중에 문제가 발생했습니다.

"numbers.txt" 파일을 만들었습니다.

1
12
123
1234
12345
123456

저는 "이전 문자가 최소 m번, 최대 n번 나타납니다."라는 뜻의 {m,n} 형식의 정규식을 연습하고 있습니다.

이제 내가 사용할 때

sed -n '/^[0-9]\{1,3\}/ p' numbers.txt

Numbers.txt 파일의 모든 행을 표시합니다.

그러나 내가 사용할 때

sed -n '/^[0-9]\{1,3\}$/ p' numbers.txt

이 명령은 1자 이상 3자 이하의 문자만 표시합니다.

왜 이 "$"를 추가해야 합니까? 내 이해에 따르면 $를 입력하면 최소 1자에서 최대 3자로 끝나는 줄을 찾으려고 한다는 의미입니다.

또한 첫 번째 명령이 모든 줄을 인쇄하는 이유는 무엇입니까?

답변1

이 정규식은 다음과 같습니다.

^[0-9]\{1,3\}

sed에게 다음을 검색하라고 지시하세요:

  • ^- 줄의 시작 부분, 그 다음
  • [0-9]- 단일 숫자 \{1,3\}- 1~3회 반복한 다음
  • 뭐든지 뭐든지

...보시다시피 이는 예제 입력의 모든 줄과 일치합니다. 한 자리, 두 자리 또는 세 자리 숫자로 시작하므로 처음 세 줄과 일치합니다. 모두 3자리 숫자로 시작하기 때문에 후속 행과 일치합니다(계속되지만 정규식은 상관하지 않습니다).

정규식은 "탐욕적"입니다. 즉, 기본적으로 가능한 한 많이 일치하지만(전체 정규식에 코딩하는 모든 유연성을 고려할 때) "게으르다"는 의미입니다. 당신은 특별히 ^그것을 양쪽 끝으로 고정합니다 $.

당신의 의도가 sed에게 다음 내용이 있는 줄만 인쇄하도록 지시하는 것이라고 가정합니다.정확히1~3자리 숫자인 경우 정규식에 다음과 같이 알려야 합니다.모두끝 앵커 포인트가 필요한 전체 행을 보고 싶습니다.

답변2

두 번째 사건 공개

sed -n '/^[0-9]\{1,3\}$/p' file
  • ^문자열의 시작 과 일치합니다.
  • [0-9]\{1,3\}소수점 이하 1~3자리 허용
  • $문자열의 끝과 일치합니다. 즉, 더 이상 아무 것도 기록하고 싶지 않습니다.

$두 번째 경우는 첫 번째 경우와 다릅니다.

관련 정보