相关疑难解决方法(0)

vi 是否会在文件末尾默默添加换行符 (LF)?

我无法理解一个奇怪的行为: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: …

vi history text

39
推荐指数
2
解决办法
9967
查看次数

为什么我收到“第 1 行:$':\r':找不到命令”?

我在笔记本电脑 (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)

有人可以解释一下我如何解决这个问题吗?

bash cygwin shell-script newlines

12
推荐指数
3
解决办法
5万
查看次数

每个 LF 之前添加一个 CR

我有一个正在 Windows 计算机上处​​理的文本文件。bcp在使用实用程序将数据从文件加载到数据库表之前,需要删除尾随制表符。

Bash 脚本中的以下命令删除了尾随选项卡:

sed 's/[\t]*$//' < ./input/raw.txt >> ./input/data.txt
Run Code Online (Sandbox Code Playgroud)

CR但它将-转换LFLF导致bcp命令失败的原因。

为了努力保持CR-LF我尝试了这个:

sed 's/[\t]*$/$CR/' < ./input/raw.txt >> ./input/data.txt
Run Code Online (Sandbox Code Playgroud)

但这导致:

在此输入图像描述

期望的结果是:

在此输入图像描述

如何修改命令以获得所需的输出?

bash text-processing newlines

10
推荐指数
2
解决办法
2221
查看次数

标签 统计

bash ×2

newlines ×2

cygwin ×1

history ×1

shell-script ×1

text ×1

text-processing ×1

vi ×1