여러 줄의 텍스트에서 2개의 문자열을 추출하려고 합니다.
postmsg="\033[0;37m
Email
Settings"
이 줄은 문자열 시작 부분에서 일치하는 항목을 찾아서 inCol 변수에 넣습니다.
inCol=$(perl -e 'print $1 if $ARGV[0]=~/^(\\033\[.*?m).*$/mi; ' -- "${postmsg}")
또한 시도한 나머지 문자열(기본적으로 .*$)을 가져오고 싶었습니다.
inVal=$(perl -e 'print $1 if $ARGV[0]=~/^\\033\[.*?m(.*)$/mi; ' -- "${postmsg}")
내 입력이 문자열 한 줄인 경우 실제로 작동합니다. 그렇지 않으면 아무것도 생산되지 않습니다.
.*$
라인 끝까지 매치를 해보았 \Z
으나 결과가 나오지 않았습니다. 혼자서 시도해 보았지만 .*
아무 것도 얻지 못했습니다.
다양한 수식어 등을 사용해 보았습니다. 간단한 내용이겠지만 답을 찾을 수 없습니다.
한 줄로 처리할 수 있으면 더 좋을 것 같습니다.게임을 두 번 실행하는 대신.
답변1
그리고 bash
:
inCol=${postmsg%%$'\n'*}
inVal=${postmsg#*$'\n'}
첫 번째는 가장 긴 접미사 패턴을 제거하고 \n*
, 두 번째는 가장 짧은 접두사 패턴을 제거합니다 *\n
.
답변2
물론 간단합니다.
inVal=$(perl -e 'print $2 if $ARGV[0]=~/^(\\033\[.*?m)(.*)$/mis;' -- "${1}")
끝에 's'가 누락되었습니다.