Bash 替换键值字符串中的特定值

Bash 替换键值字符串中的特定值,bash,string,sed,awk,Bash,String,Sed,Awk,我有一个大字符串,它是key(space)+value的集合,即key后跟一个或多个空格,然后是value。 现在,我需要在unix环境中使用sed、awk、grep等更改特定键的值 字符串的示例:-Key1值1-Key2值2-Key3值3 我需要一个与上面相同的新字符串,如果我理解正确,则Value2将替换为NewValue3: sed -e 's/\(.*\)\(-Key2\)\( *\)\([^ ]*\)\( .*\)/\1\2\3NewValue3\5/' 应该这样做。试试这个 #!

我有一个大字符串,它是
key(space)+value
的集合,即
key
后跟一个或多个空格,然后是
value
。 现在,我需要在
unix
环境中使用
sed、awk、grep
等更改特定
键的

字符串的示例:
-Key1值1-Key2值2-Key3值3


我需要一个与上面相同的新字符串,如果我理解正确,则
Value2
将替换为
NewValue3

sed -e 's/\(.*\)\(-Key2\)\(  *\)\([^ ]*\)\( .*\)/\1\2\3NewValue3\5/'
应该这样做。

试试这个

#!/bin/bash
read -p "What is your key?: " key
read -p "What is new value?: " value
echo "-Key1 Value1 -Key2 Value2 -Key3 Value3" | awk -vk="$key" -vv="$value" -F"-"  '
{
    for(i=1;i<=NF;i++){
        if($i ~ k){
            $i=k" "v" "
        }
    }
}1 ' OFS="-"

$ ./shell.sh
What is your key?: Key2
What is new value?: NewVal2
-Key1 Value1 -Key2 NewVal2 -Key3 Value3
#/bin/bash
阅读-p“你的钥匙是什么?:”钥匙
阅读-p“什么是新值?:”值
echo“-Key1 Value1-Key2 Value2-Key3 Value3”| awk-vk=“$key”-vv=“$value”-F“-”
{
对于(i=1;i
echo“-Key1值1-Key2值2-Key3值3”|\
sed-r-e“s/(-Key2\s+)([^-\s]+)(\s+/\1\3/g”
-键1值1-键2-键3值3
仅使用bash:

str="-Key1 Value1 -Key2 Value2 -Key3 Value3"
set -- $str  # variable is not quoted to allow for word splitting
new=""
while [[ -n "$1" ]]
do
  case "$1" in
  -Key2) val="newval2" ;;
  *) val="$2" ;;
  esac
  new="$new $1 $val"
  shift 2
done
str="$new"
str="-Key1 Value1 -Key2 Value2 -Key3 Value3"
set -- $str  # variable is not quoted to allow for word splitting
new=""
while [[ -n "$1" ]]
do
  case "$1" in
  -Key2) val="newval2" ;;
  *) val="$2" ;;
  esac
  new="$new $1 $val"
  shift 2
done
str="$new"