문자열의 일부를 분리하여 bash 스크립트의 변수에 저장하는 bash 스크립트를 작성 중입니다. $INSTALL_INFO
데이터를 추출하려는 파일이 변수라고 가정하면 다음과 같은 작업을 수행합니다.
BOOST=`cat $INSTALL_INFO | grep 'BOOST:' | sed 's/BOOST://g' | sed 's/^[ \t]*//'`
이 경우 제가 찾고 있는 키워드는 Boost 입니다. 파일 항목의 형식은 다음과 같습니다.
<possible whitespace><exact title><indeterminate whitespace><data I want><possible whitespace>
sed 명령을 사용하여 이 작업을 수행하는 더 깔끔한 방법이 있어야 하지만 아무것도 알 수 없습니다.
답변1
이를 해결하는 방법은 sed -n
표현식과 일치하는 행만 인쇄하는 를 사용하고, 원하는 부분만 남기고 전체 행을 설명하는 표현식을 사용하는 것입니다.
BOOST=$(sed -n 's/^.*BOOST:[ \t]*\([^ \t]*\).*$/\1/p' $INSTALL_INFO)
꼬리는 (교체를 수행한 후) 줄을 인쇄하라고 /p
지시합니다 .sed
"내가 원하는 데이터" 자체에 공백이 포함될 수 있다면 조금 더 까다롭습니다. 줄 끝의 공백을 "씹기" 위해 표현식을 수정해야 합니다. "reluctant" 수정자를 사용할 수 있도록 Perl로 전환하겠습니다( ?
반복 연산자 뒤에).
BOOST=$(perl -ne 'print if s/^.*BOOST:\s*(.*?)\s*$/\1/' install_info.txt)
물론 Perl을 사용하면 줄을 수정하지 않고 일치하는 부분만 인쇄할 수 있습니다.
BOOST=$(perl -ne 'print $1 if /BOOST:\s*(.*?)\s*$/' install_info.txt)