2012-09-10 47 views
4

SO和其他地方的一個常見問題是如何使用bash循環遍歷每行輸出。我知道答案的,我一直在愉快地使用下面好幾年了:Bash腳本:通過換行循環...語法解釋?

IFS=$'\n' 

不過,我稍微使用的語法困惑。我有一個很好的搜索/谷歌,但由於上述搜索引擎使用/忽略的符號數量很大 - 我還沒有找到解釋。

我最近也在其他腳本的輸出中看到了這一點。我遇到了來自netcat的結果問題。經仔細檢查,原來,從NC輸出是在一個相似的格式:

$'Some_Output_Here\r` 

我最終需要切斷\r,但不知道最好的方式去了解它,我最終使用egrep -o ([0-9|a-Z]*)。任何更好的想法?

+0

僅供參考,對文件內容進行循環的首選方式不適用於for循環但一會兒讀循環;參見[BashFAQ#1](http://mywiki.wooledge.org/BashFAQ/001)。 –

回答

2

Bash手冊解釋了這種引用方法,它稱爲ANSI-C Quoting

+0

實際的bash手冊頁沒有引用該名稱的構造(不幸),但您可以通過搜索「ANSI C」找到相關部分。 – chepner

+1

信息Bash手冊比手冊頁更完整且易於理解。通過運行'info bash',假設它已安裝。 –

1

邁克爾編輯了原始文章後,我認爲它更有意義。

我認爲發佈的人需要查找刪除回車。 這應該是足夠用

sed -e 's/^M//g' 

有很多的去除控制非打印字符的其他方式:

所有控制字符:

egrep -v "[[:cntrl:]]" 
sed -r "s/[[:cntrl:]]//g" 

非打印字符

tr -dc '[:print:]' 
+0

我所做的只是刪除「任何幫助/指針將不勝感激jwa」 –