我无法理解一个奇怪的行为:vi 似乎在文件末尾添加了一个换行符(ASCII:LF,因为它是 Unix ( AIX ) 系统),而我没有专门输入它。
我在 vi 中编辑文件(注意不要在最后输入换行符):
# vi foo ## Which I will finish on the char "9" and not input a last newline, then `:wq`
123456789
123456789
123456789
123456789
~
~
## When I save, the cursor is just above the last "9", and no newline was added.
Run Code Online (Sandbox Code Playgroud)
我希望 vi 将它“按原样”保存,因此有 39 个字节:前三行(数字 1 到 9,后跟一个换行符(我的系统上为 LF))中的每一行都有 10 个 ASCII 字符,最后一行只有 9 个行(字符 1 到 9,没有终止换行符/LF)。
但是当我保存它时出现它是40个字节(而不是 39 个),并且od 显示一个终止的 LF: …
我在笔记本电脑 (DOS) 上使用 Cygwin。我收集了同事的脚本和我自己的脚本。我不是 IT 人员,对 Unix 不了解。我正在遵循我同事的语法并且能够管理一些简单的事情。
这些脚本在我的旧笔记本电脑上运行良好。我刚换了笔记本电脑并安装了 Cygwin。当我运行我的脚本时,它们不起作用。这是我收到的错误消息的一个示例:
line 1: $':\r': command not found
line 5: syntax error near unexpected token `$'\r''
line 5: `fi
Run Code Online (Sandbox Code Playgroud)
这是我脚本的前 5 行
:
iter=1
if [ -f iter.txt ]
then rm ./iter.txt
fi
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下我如何解决这个问题吗?
我有一个正在 Windows 计算机上处理的文本文件。bcp
在使用实用程序将数据从文件加载到数据库表之前,需要删除尾随制表符。
Bash 脚本中的以下命令删除了尾随选项卡:
sed 's/[\t]*$//' < ./input/raw.txt >> ./input/data.txt
Run Code Online (Sandbox Code Playgroud)
CR
但它将-转换LF
为LF
导致bcp
命令失败的原因。
为了努力保持CR
-LF
我尝试了这个:
sed 's/[\t]*$/$CR/' < ./input/raw.txt >> ./input/data.txt
Run Code Online (Sandbox Code Playgroud)
但这导致:
期望的结果是:
如何修改命令以获得所需的输出?