В качестве обходного пути с bash
регулярным выражением (без sed
), попробуйте что-то вроде:
declare -A user_info["username123"]="age:23" # just an example of user_info
pattern="(user=)([a-zA-Z0-9]*) (.*)"
while IFS= read -r line; do
if [[ $line =~ $pattern ]]; then
printf "%s%s %s more_info=%s\n" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}" "${user_info["${BASH_REMATCH[2]}"]}"
fi
done < "./log.txt" > "./log_plus.txt"
Пример log.txt:
user=username123 blah blah
other lines
Ивывод:
user=username123 blah blah more_info=age:23
Просто для информации вы можете упростить строку printf
следующим образом:
printf "%s%s %s more_info=%s\n" "${BASH_REMATCH[@]:1:3}" "${user_info["${BASH_REMATCH[2]}"]}"
Надеюсь, это поможет.