【问题标题】:Susbtitute an indeterminate number of semicolons but not one only替换不确定数量的分号,但不仅仅是一个
【发布时间】:2022-01-02 07:40:45
【问题描述】:

我有一个格式错误的 CSV 文件,其中包含许多类似于以下内容的行:

a;b;c;d;e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;^M

我正在努力寻找在我的 Vi 编辑器中使用的正确正则表达式,以消除多个连续的分号(每行有更多分号)和 DOS ^M 并获得干净的数据,例如

a;b;c;d;e;

【问题讨论】:

  • ;{2,}\r 不做吗?
  • 您可以使用dos2unix 删除CR 字符。

标签: regex csv vi


【解决方案1】:

首先,您需要删除尾随的分号

:%s/;\+$//g

然后,运行此命令将换行符转换为 LF:

::set ff=unix

并保存文件:

:w

【讨论】:

  • 感谢 Wiktor,但在我的 MacVIM 编辑器中,您的替换字符串只是挂在那里,似乎没有任何改变。在这个版本的 vi 中可能是一个实现问题??想知道使用 awk 或 sed 是否会更好。
  • @RobertAlexander 使用sed 会容易得多:sed -E 's/;+\r?$//g' file > newfile。修改文件内容:sed -i '' -E 's/;+\r?$//g' file
  • 非常感谢。我遇到了问题:(base) bob@Roberts-Mac-mini opendata % sed -E 's/;+\r?$//g' listaC.csv > test.csv sed: RE 错误:非法字节序列所以它似乎 char 编码不是 UTF-8 但猜猜看:(
  • 感谢 Wiktor,将尝试。祝你有美好的一天。
  • 更新:是的 export LC_TYPE=C 在 sed 工作之前。谢谢
猜你喜欢
  • 1970-01-01
  • 2019-12-02
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多