[英]Linux Bash: while loop can't loop through file (where lines are divided by \r\n)
我有這個循環:
while read p; do echo $p; done < ~/Documents/tempfile
哪個必須遍歷~/Documents/tempfile
每一行。
當該文件中的行由\\r\\n
分隔時,循環只能回顯第一行。
當我手動編輯文件時(在每行末尾Enter
) - 循環可以回顯所有行。
Bash是否使用了其他東西而不是\\r\\n
?
發現一個問題:
我不得不在文件末尾添加\\r\\n
。
之后它開始返回所有行。
謝謝你們。
您可以使用我相信的IFS
變量:
(IFS=$'\r\n' && while read p; do echo $p; done < ~/Documents/tempfile)
Linux和* nix使用\\n
作為換行序列; Windows例如使用\\r\\n
。
你可以使用dos2unix
或tr
來轉換它:
dos2unix -b yourfile
(-b創建原始文件的備份)
要么
tr -d '\r' < input.file > output.file
或者(為了滿足您的要求,感謝kojiro提及!):
tr -d '\r' < input.file | while read p; do echo $p; done < ~/Documents/tempfile
-d
用於通過read終止輸入行。 看看以下是否有效
while read -d $'\r\n' p; do echo $p; done < ~/Documents/tempfile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.