![awk: 필요한 열 수를 설정하시겠습니까?](https://linux55.com/image/100240/awk%3A%20%ED%95%84%EC%9A%94%ED%95%9C%20%EC%97%B4%20%EC%88%98%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
다음 형식으로 간단한 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)