如何在Awk命令中加入标点引号?

时间:2013-09-24 05:01:33

标签: bash awk

我是awk的新手。我只是想写一些东西来交换我的文本文件。但我失败了。

我希望输出'hello' 我用命令awk '{print "'hello'"}' filename来做。但是失败了:
输出如:hello
但我用命令awk '{print "\'hello\'"}' filename来做。再次失败:
输出如:>
ok.it似乎awk命令没有得到我的意思。 所以我对此感到困惑。如何解决问题。
伙计们谢谢。

4 个答案:

答案 0 :(得分:2)

使用ascii代码:

awk '{print "\x27" "hello" "\x27"}' filename

使用变量:

awk -v q="'" '{print q "hello" q}' filename

示例:

$ seq 2 > filename
$ awk '{print "\x27" "hello" "\x27"}' filename
'hello'
'hello'
$ awk -v q="'" '{print q "hello" q}' filename
'hello'
'hello'

答案 1 :(得分:1)

awk '{print "'"'"'hello'"'"'"}' filename

答案 2 :(得分:1)

只需使用双引号:

awk "{print \"'hello'\"}" filename

虽然这不会真正修改你的文件。

答案 3 :(得分:1)

clyfish的答案有效,如果你必须让它输出单引号,你必须使用你在命令行传递的脚本。

在这种情况下我通常会做什么,但是,当我需要做引用但我不想写一个'真正'的awk脚本时,是这样的:

awk 'function q(word) { return "\"" word "\"" } 
     { printf("mv %s SomeDir/;", q($0)) }'

我所做的是定义一个函数,该函数返回以双引号传递的任何内容。然后使用printf实际使用它。如果不这样做,我将不得不这样做:

awk '{ print("mv \"" $0 "\" SomeDir/;") }';

它非常讨厌。对于更复杂的例子,这可以节省生命。

但是,假设您确实需要输出带有实际单引号的内容。在这种情况下,在尝试在命令行上传递这样的脚本时处理奇怪的shell引用规则会让你完全疯狂,所以我建议你只写一个简单的一次性文件。

#!/usr/bin/awk
# hi.awk
{ print("'hello'") }

然后调用它:

awk -f ./hi.awk

如果你这样做,你甚至不需要文件中的#!行,但它也不会受到伤害。