2013-06-04 40 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