파일의 행 일부를 변수에 저장하기 위해 sed 표현식 단순화(bash)

파일의 행 일부를 변수에 저장하기 위해 sed 표현식 단순화(bash)

문자열의 일부를 분리하여 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)

관련 정보