我有以下命令,它可以满足我的 99% 的要求:
root@CA2UA5232QPZ:/# tail -3 newtag | awk '{print $1}'
v1.0.20170512.1
v1.0.20170712.1
v1.0.20170712.2
root@CA2UA5232QPZ:/#
但我需要对其进行调整,以便输出如下所示:
'v1.0.20170512.1'
'v1.0.20170712.1'
'v1.0.20170712.2'
答案1
您可以将输出传输至sed
:
tail -3 newtag| awk '{print $1}'| sed "s/^/'/;s/$/'/"
答案2
这里有可怕的外壳引用这些
awk '{print "'"'"'" $1 "'"'"'"}'
awk '{print "'\''" $1 "'\''"}'
或者使用奇数输出字段分隔符
awk -v OFS="'" '{print "", $1, ""}'
但这也不算太糟
awk -v q="'" '{print q $1 q}'
答案3
另一种方法是使用十六进制 ASCII 码'
:
tail -3 newtag | awk '{print "\x27" $1 "\x27" }'
答案4
1.一次通过sed
:
tail -3 newtag | sed "s/\(\S*\).*/'\1'/"
解释:sed
替换字符串中的
2.或者你可以使用perl
:
tail -3 newtag | perl -anE "say qq('\$F[0]')"
解释:
perl
擅长文本处理的脚本语言-a
按字段拆分每一行n
不自动打印每一行E
执行以下命令,并启用以下功能:say
"
因为"
我们稍后要使用'
say
打印以下表达式和换行符qq(
允许变量插值的文字表达式的开始'
文字'
\$F[0]
行上的第一个“字段”'
文字'
)
文字表达式的结束"
指令结束