替换或删除所有 \n 但不是 \r\n
Replace or remove all \n but not \r\n
我有一个格式不正确的 CSV 文件,每行数据都以回车符 returns (\r\n) 结尾。
但是,一些文本值在逗号之间有换行符 (\n)。这使得读取文件有问题。
在Vim中,如何用“”替换所有单独的“\n”,而不是“\r\n”的一部分?
Vim 中的示例文件外观:
1,a,b,c^M
2,d,e,f^M
3,g
,h,i^M
4,j,k,l
因为我不知道如何使用 non-selection 正则表达式,所以我做了以下操作。
我把所有的"\n"都换成了"":
:%s/\n//
然后将所有的"\g"替换为"^M":
:%s/\g/^M/
其中^M用Ctrl + V, Ctrl + [=20输入=]M
您的回答侧重于替换和 EOL 字符,因此这里是使用相同工具的稍微不同的方法:
:%s/\(\w\)\n/
我们在哪里……
- 搜索后跟“换行符”的“单词字符”,
- 抓取单词字符,
- 最后用捕获替换匹配,有效地删除换行符。
但是替换和 EOL 字符并不是这里唯一可用的角度。我们可以简单地将其视为一个非常简单的线连接问题:
:g/^,/-j!
我们在哪里……
- 在以逗号开头的每一行上执行一条命令,
- 命令是
:-join!
,它将标记行上方的行与标记行连接起来,没有space。
参见 :help :g
、:help :range
和 :help :join
。
我有一个格式不正确的 CSV 文件,每行数据都以回车符 returns (\r\n) 结尾。
但是,一些文本值在逗号之间有换行符 (\n)。这使得读取文件有问题。
在Vim中,如何用“”替换所有单独的“\n”,而不是“\r\n”的一部分?
Vim 中的示例文件外观:
1,a,b,c^M
2,d,e,f^M
3,g
,h,i^M
4,j,k,l
因为我不知道如何使用 non-selection 正则表达式,所以我做了以下操作。
我把所有的"\n"都换成了"":
:%s/\n//
然后将所有的"\g"替换为"^M":
:%s/\g/^M/
其中^M用Ctrl + V, Ctrl + [=20输入=]M
您的回答侧重于替换和 EOL 字符,因此这里是使用相同工具的稍微不同的方法:
:%s/\(\w\)\n/
我们在哪里……
- 搜索后跟“换行符”的“单词字符”,
- 抓取单词字符,
- 最后用捕获替换匹配,有效地删除换行符。
但是替换和 EOL 字符并不是这里唯一可用的角度。我们可以简单地将其视为一个非常简单的线连接问题:
:g/^,/-j!
我们在哪里……
- 在以逗号开头的每一行上执行一条命令,
- 命令是
:-join!
,它将标记行上方的行与标记行连接起来,没有space。
参见 :help :g
、:help :range
和 :help :join
。