【发布时间】:2017-07-05 15:18:38
【问题描述】:
我是 shell 脚本的初学者。 我有一个包含 = 字符的值的变量。 我想在 = Character 之后的字段中添加引号。
abc="source=TDG"
echo $abc|awk -F"=" '{print $2}'
我的代码只打印一个字段。 我的预期输出是
source='TDG'
【问题讨论】:
我是 shell 脚本的初学者。 我有一个包含 = 字符的值的变量。 我想在 = Character 之后的字段中添加引号。
abc="source=TDG"
echo $abc|awk -F"=" '{print $2}'
我的代码只打印一个字段。 我的预期输出是
source='TDG'
【问题讨论】:
$ 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#*=} 将从字符串开头删除零个或多个字符和第一个 =
【讨论】:
" ' ' "
Sed 会是更好的选择:
echo "$abc" | sed "s/[^=]*$/'&'/"
Awk 可以做到,但需要额外的位:
echo "$abc" | awk -F= 'gsub(/(^|$)/,"\047",$2)' OFS==
【讨论】:
What is taking place?
使用 sub 将 TDG 用八进制 nr 单引号括起来以避免引用问题。
echo "$abc" | awk '{sub(/TDG/,"\047TDG\047")}1'
source='TDG'
【讨论】: