다음 형식으로 간단한 conf 파일을 구문 분석하고 있습니다.
key = value
이를 위해 나는 awk
다음과 같은 것을 사용합니다.
KEY=$(awk -F' *= *' '/^key/{print $2}' file.conf)
그러나 일부 값에는 기호가 포함될 수 있으므로 기본적으로 내가 원하는 것은 두 개의 열만 원한다고 =
알려주는 것입니다 . 즉, 첫 번째 구분 기호 다음에 만나는 모든 것을 하나의 열로 받아들이도록 강제하는 것입니다. awk
그런 옵션을 찾지 못했습니다. 어떻게 해야 하나요?
답변1
필드 내에 구분 기호가 나타날 수 있다면 이는 실제 구분 기호가 아닙니다. 나는 다음과 같은 것을 사용할 것입니다
KEY=$(sed -n '/^key *=/ { s/^key *= *//; p }' file.conf)
대신에 이것은 로 시작하는 줄을 찾고 key
그 뒤에 공백과 =
기호가 오는 것을 찾아서 줄의 시작 부분을 제거하고 인쇄합니다. ~처럼데이브 톰슨_085p
조건이 될 수 있음 을 지적합니다 s
.
KEY=$(sed -n 's/^key *= *//p' file.conf)
동등한 AWK는 다음과 같습니다.
KEY=$(awk '/^key *=/ { sub("^key *= *", ""); print }' file.conf)
동일한 조합 기술을 사용할 수 있습니다.
KEY=$(awk 'sub("^key *= *", "")' file.conf)
답변2
또 다른 변형입니다. 이번에는 grep을 사용합니다.
KEY=$(grep -Po '^key\s*=\s*\K.*' f.conf )
답변3
첫 번째 열 값을 꺼내십시오.
KEY=$(awk -F= '{$1="";sub("=","")}1' OFS="=" file.conf)
답변4
다음 명령을 사용하여 원하는 것을 얻을 수 있습니다.
KEY=$(awk -F 'key *= *' '{print $2}' f.conf)