2017-04-11 78 views
-1

我有一個帶回車的文件和一個bash腳本,因爲它們不起作用。我處理它們的方式是使用dos2unix。這是腳本:在bash中獲取過去的回車沒有更改原始文件

while IFS= read -r line; do 
    [[ $line =~ REGEX ]] && printf "SUCCESS" 
done < <(dos2unix < file) 

這樣我不修改原始文件,一切都很好。我的問題是:是否有另一種方法來做同樣的事情 - 越過回車而不是同時修改原始文件。

+0

在這種情況下REGEX應該是什麼,即你想要完全匹配什麼?向我們展示您的輸入和期望輸出的示例。 –

回答

0

人們可以平凡除去的後回車(當且僅當所述角色存在的話)與parameter expansion

while IFS= read -r line && line=${line%$'\r'}; do 
    [[ $line =~ REGEX ]] && printf "SUCCESS" 
done <file 

${var%val}膨脹到的$var與從端部去除的字符串val內容; $'\r'ANSI-C-like syntax,用於在ksh93,bash和實現擴展的其他shell中的回車符。

+0

在Bash中,'$'\ r''需要'shopt -s extquote'(儘管它默認是啓用的)。 – ephemient

+0

永遠的我應該對你保持負債先生Lifesaver! –

+0

請幫我解決一件事。我想在** I循環之前在「文件」**上執行sed「s/\」/ \'\'/ g「。我試圖在最後(與「完成」相同的行)管道它,但它沒有奏效。我該怎麼做,在哪裏做? –

相關問題