0

我读了这样的文件:

while read line; do
    echo "$line"
done < file.txt

有时,我看不懂最后一行。
用 vim 打开文件,然后执行 ":set list",然后我可以在每一行的末尾看到一个 "$"。
但是,当我执行“cat file.txt”时:

$ cat file.txt
aa
bb$

最后一行“bb”和“$”在同一行。
我认为这是一个问题。
如何使用“while”读取所有行?
ps:vim 可以像 \n 一样显示换行符并像 \r 一样返回吗?

我是初学者,求助!

4

2 回答 2

3

这很可能是因为缺少\n行尾或一行\r中的存在。

您可以通过以下命令对其进行测试:

cat -vte file

要从\r最终使用此 sed 删除:

sed -i.bak 's/'$'\r''$//' file
于 2013-11-14T09:15:22.800 回答
3

Vim 提醒您这种情况(最后一行中缺少换行符( \n) 字符)的方式是在打开期间,[noeol]将在消息中的位置。

:edit foo
"foo" [noeol] 3L, 42C

您也可以稍后通过

:setlocal eol?

要追溯修复这个问题(意味着你不能修改文件的源以避免创建这样的文件),只:write需要来自 Vim 的文件;它会自动插入最后的换行符。

于 2013-11-14T09:36:33.927 回答