我是shell脚本的初学者。 我有一个变量包含值= character。 我想在= Character之后的字段中添加引号。
abc="source=TDG"
echo $abc|awk -F"=" '{print $2}'
我的代码只打印一个字段。 我的预期输出是
source='TDG'
请帮帮我。
答案 0 :(得分:3)
$ abc='source=TDG'
$ echo "$abc" | sed 's/[^=]*$/\x27&\x27/'
source='TDG'
[^=]*$
匹配行尾的非=
字符\x27&\x27
在匹配的文字
使用awk
$ echo "$abc" | awk -F= '{print $1 FS "\047" $2 "\047"}'
source='TDG'
-F=
输入字段分隔符为=
print $1 FS "\047" $2 "\047"
打印第一个字段,然后是输入字段分隔符,后跟单引号,然后是第二个字段和另一个单引号$ echo "${abc%=*}='${abc#*=}'"
source='TDG'
${abc%=*}
将删除最后一次出现的=
及其后的零个或多个字符${abc#*=}
将从字符串=
答案 1 :(得分:3)
Sed会是更好的选择:
echo "$abc" | sed "s/[^=]*$/'&'/"
Awk可以做到但需要额外的位:
echo "$abc" | awk -F= 'gsub(/(^|$)/,"\047",$2)' OFS==
答案 2 :(得分:0)
What is taking place?
使用sub用单引号括起TDG的八进制数,以避免引用问题。
echo "$abc" | awk '{sub(/TDG/,"\047TDG\047")}1'
source='TDG'