私は複数のkey=value
置換を実行する関数に取り組んでいますsed
:
batch_sub () {
local file="${@: -1}" # Last argument is file to be changed.
[[ -w "${file}" ]] || { echo "Invalid file: ${file}" ; return 1 ; }
for arg in "${@}" ; do
[[ $arg =~ (.*)=(.*) ]] || continue
# 'trim_str' will trim leading & trailing spaces.
local key=$(trim_str "${BASH_REMATCH[1]}")
local value=${BASH_REMATCH[2]}
sed -i 's@'"\(${key}"' *=\).*@\1'"${value}"'@' "${file}"
done
}
この関数は、次のような引数を受け入れます。
batch_sub "a = x" "b = y" "c = z" "a.b.d.e=udp://b:8080" "/tmp/file"
そして正常に動作します。しかし、私が望むのは、次のような引数を受け入れるようにすることです:
batch_sub "a = x b = y c = z a.b.d.e=udp://b:8080" "/tmp/file"
さらに、sed
この関数内で が 1 回だけ呼び出されると便利です。
sed -i -e 's/$key=/\1$value/'
-e 's/$key1=/\1$value1/'
'/tmp/file'
お知らせ下さい。