我有一个大字符串,它是key (space)+ value
的集合,即key
后跟一个或多个空格,然后是value
。
现在,我需要在value
环境中使用key
等更改特定sed, awk, grep
的{{1}}。
例如。字符串:unix
我需要一个与上面相同的新字符串-Key1 Value1 -Key2 Value2 -Key3 Value3
将替换为Value2
答案 0 :(得分:1)
echo "-Key1 Value1 -Key2 Value2 -Key3 Value3" | \
sed -r -e "s/(-Key2\s+)([^-\s]+)(\s+)/\1<newvale>\3/g"
-Key1 Value1 -Key2 <newvale> -Key3 Value3
答案 1 :(得分:0)
如果我理解正确的话:
sed -e 's/\(.*\)\(-Key2\)\( *\)\([^ ]*\)\( .*\)/\1\2\3NewValue3\5/'
应该这样做。
答案 2 :(得分:0)
试试这个
#!/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
答案 3 :(得分:0)
只是使用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"