egrep 그룹 문자를 따옴표로 묶음

egrep 그룹 문자를 따옴표로 묶음

릴리스 정보 파일에서 내 시스템의 "PRETTY_NAME"을 가져오고 싶습니다. bash 파일에서 다음 명령을 사용하여 가져옵니다.

SYS_VERSION=$(cat /etc/*-release | egrep  "^PRETTY_NAME=(.*[a-zA-Z]+.*)$")

전체 행을 반환합니다.

PRETTY_NAME="Ubuntu 16.04.3 LTS"

하지만 저는 큰따옴표 안의 문자만 원합니다.

답변1

사용 lsb_release:

$ lsb_release -ds
Ubuntu 17.04

또는 스크립트에서

sys_descr=$( lsb_release -ds )
printf 'This is a "%s" system\n' "$sys_descr"

lsb_release파일을 분석합니다 /etc/os-release. 이 -d플래그는 시스템에 대한 "설명"을 제공하며, 이는 정확히 제공 PRETTY_NAME되는 것 입니다 /etc/os-release. 이 -s플래그는 헤더 없이 출력을 제공합니다.

lsb_release및 에 대한 설명서를 참조하세요 os-release.

답변2

사용 sed:

sed '/^PRETTY_NAME=/!d;s///;s/"//g' /etc/*-release

첫 번째 명령은 으로 시작하지 않는 모든 줄을 제거하고 PRETTY_NAME=, 두 번째 명령은 해당 패턴을 제거하고(빈 패턴은 마지막 패턴이 사용됨을 의미함), 세 번째 명령은 따옴표를 제거합니다.

답변3

싱글로sed표현하다:

sed -n 's/PRETTY_NAME="\(.*\)"/\1/p' /etc/*release

산출:

Ubuntu 16.04.3 LTS

귀하의 경우에는 다음과 같습니다.

SYS_VERSION=$(sed -n 's/PRETTY_NAME="\(.*\)"/\1/p' /etc/*release)

답변4

명령을 파이프로 연결할 수 있습니다.cut -d '"' -f2:

SYS_VERSION=$(cat /etc/*-release | egrep  "^PRETTY_NAME=(.*[a-zA-Z]+.*)$" | cut -d '"' -f2)

관련 정보