정수와 일치하는 정규식 패턴을 이해하지 못합니다.

정수와 일치하는 정규식 패턴을 이해하지 못합니다.

https://www.gnu.org/software/sed/manual/sed.html#Command_002dLine-Options

-n
--quiet
--silent
-e script
--expression=script 입력이 처리될 때 실행될 명령 세트에 스크립트의 명령을 추가합니다.

https://stackoverflow.com/questions/14593320/insert-field-separator-to-arrange-and-capture-value-in-variable-in-shell-script/14593411#14593411

이 답변처럼:

echo $'For example:\nThis is counter1 1000\nthis counter2 2000\n
     this counter3 is higher value 3000\ndone.\n' |
  sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

나는 ([0-9]\{1,99\}\)그것이 패턴 정수를 의미한다는 것을 이해합니다.
^문자열의 시작 부분을 인용합니다.
.*1개 이상의 문자를 나타냅니다.

하지만 전반적으로 여전히 혼란스럽습니다. sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

답변1

(우선, 이것은 bash 정수 정규식 패턴이 아닙니다. sed정규식을 다루고 있으며 bash와는 아무 관련이 없습니다.)

그래서 나는 당신이 정규식을 알아낼 수 없다는 것을 알고 있습니다sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

일을 더 간단하게 만들어 봅시다. 동등한 코드는 다음과 같습니다sed -E -ne 's/^.* ([0-9]{1,99})/\1/p'

확장된(현대적인) 정규식을 활성화 -E하면 이스케이프된 콘텐츠를 사용할 필요가 없습니다.\

s/pattern/replacement/연산자는 정규식 패턴과 일치하는 왼쪽 문자열을 찾아 오른쪽 문자열로 바꿉니다.

이제 집중해보자/^.* ([0-9]{1,99})/

  • ^줄 시작 일치
  • .*임의의 문자와 0회 이상 일치
  • (공백)은 단일 공백 ​​문자와 일치합니다.
  • [0-9]{1,99}최소 1회, 최대 99회 발생하는 모든 숫자와 일치하므로 길이가 1에서 99 사이인 모든 숫자입니다.

([0-9]{1,99})괄호 안에 있습니다. 이는 sed가 해당 하위 문자열을 "캡처"하여 \1사용하는 교체 부분에 사용한다는 의미입니다.

관련 정보