鑑於此文件UNESCAPE與管
$ cat foo.txt
\"That's funny, haha\"
我能反轉義與read
$ read bar < foo.txt
$ echo $bar
"That's funny, haha"
但是雙引號可以將此與管道做什麼?類似於
cat foo.txt | unescape
鑑於此文件UNESCAPE與管
$ cat foo.txt
\"That's funny, haha\"
我能反轉義與read
$ read bar < foo.txt
$ echo $bar
"That's funny, haha"
但是雙引號可以將此與管道做什麼?類似於
cat foo.txt | unescape
這似乎做
sed -r 's/\\(.)/\1/g'
是或否,具體取決於您的問題。管道不能刪除反斜槓,但是,正如你所看到的,read
可以:
cat foo.txt | read bar
這一點,雖然,一個沒用使用的cat
,它不會做你的需要呢。
在Bash中,這增加了一個「特徵」,管道的每一側都在它自己的過程中運行。這意味着變量(bar
)在調用過程中將不可用。所以,反斜槓將被刪除,但它不會對你有一點好處。
是的,你可以圖謀捕捉到它:
bar=$(cat foo.txt | { read bat;echo $bat;})
但是,這不只是慘不忍睹,這是低效的,因爲好。
堅持重定向。
這是一個老問題了,但這樣它在這裏,因爲我有同樣的問題,我會添加這個答案備案,但沒有找到一個解決方案任何地方。我想出了這個解決方案,適用於任何字符串轉義序列:
echo "" | gawk "{ print \"\`cat foo.txt\`\" }"
echo "" | gawk "{ print \"$(cat foo.txt)\" }"
echo "" | gawk "{ print \"$(< foo.txt)\" }"
他們是相同的操作的所有變體,並注意在第一個使用反引號的。他們正在利用gawk的print命令完成的操作,並且僅限於單行輸入文件(儘管我確信可以爲多行輸入制定更復雜的變體)。
請注意,我認爲可能是一個解決方案的cat foo.txt | gawk '{ printf $0 }'
不起作用 - 看起來gawk並沒有忽略它的輸入,即使它被用作printf格式的字符串,否則它就會失敗。
在Mac OS X上,它是'-E'而不是'-r' – max 2015-04-19 15:22:35
這隻適用於像空格,反斜槓等轉義的ascii字符。如果它轉義換行符,製表符或unicode值不起作用 – EkriirkE 2015-10-12 06:17:21