![숫자 문자열의 출력을 단락 문자열로 가져옵니다.](https://linux55.com/image/13949/%EC%88%AB%EC%9E%90%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EB%8B%A8%EB%9D%BD%20%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C%20%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4..png)
.jar
스크립트의 변수 에 출력이 저장되어 있습니다.
Token is: XYZ123
Not found in page: 0
Not found in page: 1
Not found in page: 2
Found with ID : #14214733
#
이제 ie 다음에 ID를 추출하여 다른 변수에 저장하고 싶습니다 14214733
. bash에서 어떻게 할 수 있습니까?
편집 : 다음을 사용하여 해결echo ${var##*#}
답변1
bash를 사용하여 정규식으로 캡처
output='Token is: XYZ123
Not found in page: 0
Not found in page: 1
Not found in page: 2
Found with ID : #14214733'
[[ $output =~ "Found with ID : #"([0-9]+) ]] && id=${BASH_REMATCH[1]}
echo $id # => 14214733
Bash 정규식에서는 리터럴 텍스트 부분이 인용되지만 정규식 특수 콘텐츠는 인용되지 않습니다. 캡처된 부분은 BASH_REMATCH 배열로 들어갑니다.
답변2
한 가지 방법은 다음과 같습니다.
sec_var=`cat ts.txt | grep -oE 'ID : #([0-9]+)' | cut -f2 -d '#'`
sec_var=`echo $first_var | grep -oE 'ID : #([0-9]+)' | cut -f2 -d '#'`
grep "-z" 옵션을 사용할 수도 있습니다.
-z는 줄 끝의 개행을 억제하고 이를 널 문자로 바꿉니다. 즉, grep은 줄의 끝이 어디에 있는지 알고 있지만 입력을 하나의 큰 줄로 처리합니다.