2013-06-04 37 views
4

我看到awk可识别转义序列识别输入的转义序列

$ awk 'BEGIN {print "foo\nbar"}' 
foo 
bar 

然而,它没有输入

$ awk '{print $1}' <<< 'hello\nworld' 
hello\nworld 

是否可以作出承认逃避输入序列?

回答

0

这适用于变量以及

$ set 'hello\nworld' 

$ printf %b "$1" | awk '{print $1}' 
hello 
world 
+1

是的,这就是为什么我认为你的答案不能“识别转义序列”。转义序列的要点是允许产生任何序列。 (正如我所说的,用awk,C语言,Python语言,或者bash的$'...'形式来尝试。) – rici

+0

@StevenPenny你的问题是'能否识别输入中的转义序列? '如何使用'awk's'来修改输入来回答你的问题?可能是我解释你的问题错了? –

+0

在一般情况下,您想要正确处理任意长度的反斜杠。 ''\\“'应该被解释为一个文字反斜杠,''\\\”\ t \ r \ n“'应该是反斜线,双引号,制表符,回车符,换行符。我不认为这可能是在Awk中得到了优雅和地道的解决,但是当然,一个蛮力的实现在技术上并不困难,只是单调乏味。 – tripleee

0

您正在使用的字符串不会将换行符转义序列扩展为实际的换行符。试试这个:

`echo -e "hello\nworld" | awk '{print $1}'` 

或者:

awk '{print $1}' <<< "hello 
world" 
3

你需要做这样的事情 -

[jaypal:~/temp] awk '{print $1}' <<< $'hello\nworld' 
hello 
world 

bash(1)

+1

这是我建议作为一种解决方法,但不清楚是否OP对解决这个特定问题很重要(在这种情况下,我确实会建议使用Bash的'$'...''字符串符号)或更一般地处理Awk中的字符串中的反斜杠转义。 – tripleee