https://www.gnu.org/software/sed/manual/sed.html#Command_002dLine-Options
-n
--quiet
--silent
-e script
--expression=script 입력이 처리될 때 실행될 명령 세트에 스크립트의 명령을 추가합니다.
이 답변처럼:
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
사용하는 교체 부분에 사용한다는 의미입니다.