3

我有这个循环:

while read p; do echo $p; done < ~/Documents/tempfile

必须循环遍历~/Documents/tempfile.

当该文件中的行由\r\n- 分隔时,循环只能回显第一行。

当我手动编辑文件时(Enter在每行的末尾点击) - 循环可以回显所有行。

Bash 是否使用其他东西而不是\r\n

发现一个问题:

我也必须\r\n在文件末尾添加。

之后它开始返回所有行。

谢谢你们。

4

3 回答 3

6

您可以使用IFS我相信的变量:

(IFS=$'\r\n' && while read p; do echo $p; done < ~/Documents/tempfile)
于 2013-10-11T15:06:13.493 回答
2

-d用于用read终止输入行。看看以下是否有效

while read -d $'\r\n' p; do echo $p; done < ~/Documents/tempfile
于 2013-10-11T15:53:25.130 回答
2

Linux 和 *nix\n用作换行符序列;例如 Windows 使用\r\n.

您可以使用dos2unixtr转换它:

dos2unix -b yourfile

(-b 创建原始文件的备份)

或者

tr -d '\r' < input.file > output.file

或(为满足您的要求,感谢小次郎提及!):

 tr -d '\r' < input.file | while read p; do echo $p; done < ~/Documents/tempfile
于 2013-10-11T15:07:34.173 回答