![파일 지원, posix 유틸리티를 사용하여 구현된 키-값 저장소](https://linux55.com/image/226362/%ED%8C%8C%EC%9D%BC%20%EC%A7%80%EC%9B%90%2C%20posix%20%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B5%AC%ED%98%84%EB%90%9C%20%ED%82%A4-%EA%B0%92%20%EC%A0%80%EC%9E%A5%EC%86%8C.png)
이런 일은 매우 흔한 일인 것 같아요.
읽기에는 어떤 posix 유틸리티가 사용되고 쓰기에는 어떤 유틸리티가 사용됩니까? 가장 일반적으로 사용되는 파일 형식은 무엇입니까?
그 자리에서 수정할 수 있나요?
내 첫 번째 생각은 json과 jq를 사용하는 것이었지만 유닉스 철학을 수용하는 데 관심이 있습니다.
편집하다:
나는 이것을 할 수 있는 표준 도구가 없다고 생각합니다.
grep/awk/sed
하지만 이것을 사용하면 잠금, 서식, 특수 문자 등과 같은 다른 많은 문제에 대해 걱정해야 합니다.https://unix.stackexchange.com/a/21950/551103
"잠금, 서식, 특수 문자"에 전혀 신경 쓰지 않는다면 어떨까요? 누군가 나에게 최소한의 구현을 제공할 수 있습니까?grep/awk/sed
답변1
영숫자 키 값의 경우:
kvfile="kvfile"
put() {
if grep -q "^${1}=" "$kvfile"; then
sed -i "s/^${1}=.*$/${1}=${2}/" "$kvfile"
else
echo "${1}=${2}" >> "$kvfile"
fi
}
get() {
grep "^${1}=" "$kvfile" | awk -F= '{printf "%s", $2}'
}
Martin Kealey는 실제로 스크립트 작성 방법을 알고 sed
있으며 awk
다음과 같이 제안합니다.
put() {
sed -i "/^$1=/{ h ; s/=.*/=$2/ ; } ; $ { p; g; /./d; s/^$/$1=$2/ ; }" "$kvfile";
}
get() {
awk -F= -vk="$1" '$1 == k{ print $2 }' "$kvfile";
}