awk如何输出单引号和双引号

awk如何输出单引号和双引号,第1张

使用“”双引号把一个双引号括起来,然后使用转移字符\去对双引号进行转移,就可以输出双引号。输出单引号的方法跟双引号又有些差别,方法如下单引号:awk '{print "'\''"}'首先使用一个双引号“”,然后在双引号里面加入两个单引号‘’,接着在两个单引号里面加入一个转移的单引号\',就可以输出单引号了

你的问题实际上牵扯到 awk 和 bash 中对引号的处理。

先说 "为什么awk打印字符串my test 需要双引号“my test”

awk 打印字符串,字符串必须用双引号括起来。 如果不扩,比如 awk '{print my test}', awk 会认为你是要打印变量 my 和 test 的值。 比如

echo 'aaa' | awk '{my=12test=13print my test}'

你会得到

1213

然后再说 echo 'aaa' | awk '{ print "'"$c"'" }' //放大 " ' " $c " ' "

这里,用 单引号将整个 awk 命令括起来,这个没什么问题。 由于你要 awk 打印的是 bash 变量 c 的内容, 如果直接 awk '{print "$c"}', 由于 $c 是在单引号中,bash不会将 $c 替换成其值,相当于让 awk 直接打印字符串 $c。

为了能够既保证 awk print 语句后面的字符串被 双引号抱起来,又让 $c 被bash替换成 c 的值,你的命令里才会出现那么多引号,并将awk命令分成了好几个部分,

第一部分, '{print "' ; 即 {print 以及要打印字符串的左边的双引号

第二部分, "$c"; 由于是双引号,所以bash会将 $c 替换成 c 的值

第三部分, '"}' ; 即 print 要打印的字符串的右边的双引号和括号

这三部分连起来就构成了了完整的 awk 命令。

但是,我认为可以有更易读的方法来解决你这个问题,比如利用 bash 的 eval

cmd="echo 'aaa' | awk '{print \"$c\"}'"

eval $cmd

或者用双引号将awk命令括起来

echo 'aaa' | awk "{print \"$c\"}"

y:root:/tmp> cat semi

1:2

3:4

5:6:7:8

9:8:7

y:root:/tmp> awk '{sub(":", "\":\"")print}' semi

1":"2

3":"4

5":"6:7:8

9":"8:7


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11935893.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存