"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자리 허용$
문자열의 끝과 일치합니다. 즉, 더 이상 아무 것도 기록하고 싶지 않습니다.
$
두 번째 경우는 첫 번째 경우와 다릅니다.