나는 이 파일을 가지고 있습니다 :
header:
title: hello
version: 1.2.3
버전 번호를 추출하고 싶습니다.
내 초기 시도는
grep ^\s+version:\s+(\d\.\d\.\d) file.txt
그러나 이는 빈 출력을 생성합니다. 내가 시도한 의견의 제안에 따라
grep -P '^\s+version:\s+(\d\.\d\.\d)' file.txt
하지만 "1.2.3" 대신 "버전: 1.2.3"이 표시됩니다.
내가 뭘 잘못했나요?
답변1
grep
사용Posix 기본 정규식( BRE
) 귀하의 표기법은 기본적으로 지원되지 않습니다.
가능한 경우 grep -E
Posix 확장 정규식( ERE
) 및 grep -P
Perl 호환 정규식( )을 사용 하는 데 사용됩니다 .PCRE
귀하의 기호는 다음에 적합합니다 grep -P
.
grep -P '^\s+version:\s+(\d\.\d\.\d)' file.txt
이는 다음에 적용됩니다 BRE
.
grep '^ \+version: \+\([0-9]\.[0-9]\.[0-9]\)' file.txt
산출:
version: 1.2.3
캡처 그룹은 grep
아무 작업도 수행하지 않으므로 여기서는 필요하지 않습니다.
버전 번호만 알고 싶다면,사용\K
및 -o
옵션:
grep -Po '^\s+version:\s+\K\d\.\d\.\d' file.txt
산출:
1.2.3
이를 위해서는 BRE
불가능합니다. 두 명령을 연결해야 합니다 grep
.
grep 'version: ' file.txt | grep -o '[0-9]\.[0-9]\.[0-9]'
또는 다음을 사용하십시오 sed
(@Kusalananda에 대한 크레딧).
sed -n 's/.*version: //p' file.txt
답변2
댓글에 따르면프루모그리고grep을 사용하여 이름 뒤에 무엇이든 얻는 방법작업 명령은 다음과 같습니다.
grep -oP "(?<=version: )(\d\.\d\.\d)" file.txt