我是awk的新手。我只是想写一些东西来交换我的文本文件。但我失败了。
我希望输出'hello'
我用命令awk '{print "'hello'"}' filename
来做。但是失败了:
输出如:hello
但我用命令awk '{print "\'hello\'"}' filename
来做。再次失败:
输出如:>
ok.it似乎awk命令没有得到我的意思。
所以我对此感到困惑。如何解决问题。
伙计们谢谢。
答案 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
如果你这样做,你甚至不需要文件中的#!
行,但它也不会受到伤害。