![ファイルサポート、posixユーティリティを使用して実装されたKey-Valueストア](https://linux33.com/image/226362/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%80%81posix%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E5%AE%9F%E8%A3%85%E3%81%95%E3%82%8C%E3%81%9FKey-Value%E3%82%B9%E3%83%88%E3%82%A2.png)
このようなことは非常に一般的なことだと思います。
読み取りにはどのようなposixユーティリティが使用され、書き込みにはどのユーティリティが使用されますか?最も一般的に使用されるファイル形式は何ですか?
その場で修正できますか?
私の最初の考えはjsonとjqを使用することでしたが、Unixの哲学に対応することに興味があります。
編集する:
私はこれを行うことができる標準的なツールがないと思います。
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";
}