macos - 使用 Sed Mac 终端查找并替换为空格

标签 macos bash csv sed terminal

我有一个包含超过 500,000 行的 .CSV 文件,我需要:

  1. 找到所有“空格双引号空格”序列并替换为空
  2. 找到所有“空格双引号”序列并替换为空
  3. 找到所有双引号并替换为空

.CSV 行示例:

"DISH Hartford & New Haven  (Hartford)", "206", "FBNHD", " 06028", " East Windsor Hill", "CT", "Hartford County"

** 要求的输出**

DISH Hartford & New Haven  (Hartford),206,FBNHD,06028,East Windsor Hill,CT,Hartford County

我需要删除所有双引号 (") 和逗号前后的空格 (,)。

我试过了

$ cd /Users/Leonna/Downloads/
$ cat bs-B2Bformat.csv | sed s/ " //g

这给了我比提示更大的“命令不完整”,所以我尝试了:

$ cat bs-B2Bformat.csv | sed s/ " //g
sed: 1: "s/": unterminated substitute pattern
$ cat bs-B2Bformat.csv |sed s/ \" //g
sed: 1: "s/": unterminated substitute pattern
$

我无法在 Excel(Excel 不会加载所有行)甚至文本编辑器中编辑太多行。我该如何解决这个问题?

最佳答案

引自here :

For POSIX compliance, use the character class [[:space:]] instead of \s, since the latter is a GNU sed extension.

基于此,我会提出以下建议,即 Jonathan Leffler指出,可以跨 GNU 和 BSD 实现移植。

sed -E 's/[[:space:]]?"[[:space:]]?//g' <path/to/file>

-E 标志在 BSD 实现上启用扩展正则表达式。在 GNU sed 上它没有记录,但正如所讨论的那样 here , 它可以与 BSD 标准兼容。

引自manual for BSD sed :

-E Interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).

将上述命令应用于包含以下单行的文件

"DISH Hartford & New Haven (Hartford)", "206", "FBNHD", " 06028", " East Windsor Hill", "CT", "Hartford County"

它产生

DISH Hartford & New Haven (Hartford),206,FBNHD,06028,East Windsor Hill,CT,Hartford County

关于macos - 使用 Sed Mac 终端查找并替换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840175/

相关文章:

java - 为什么这个 Java 应用程序在 Mac 而不是 PC 上运行缓慢?

Java程序无法获取mac环境变量

python - Pyschools 主题 13 Q 9 csv.writer

matlab - 在 Matlab 中将二维矩阵导出为三元组格式 CSV 文件的最快方法

linux - 如何解决 bash 脚本中的错误以将负载加载到 cpu 上?

java - Apache Commons CSV 框架是否提供内存高效的增量/顺序模式来读取大文件?

c - GCC 优化导致奇怪的问题 - 我该如何调试?

c - 当我在 Mac OS X 上编译它时,它正在考虑引号 ("%d") 作为未定义的 ascii 符号

bash - 从重定向到日志文件的程序输出中删除进度条

php - 远程端ssh2执行生命周期