我有一个CSV文件,看起来像:

1,3,"3,5",4,"5,5"

现在,我想将所有","(而不是引号)更改为";" 加上sed,所以看起来像这样:

1;3;"3,5";5;"5,5"

但是我找不到有效的模式。

这是刚刚在这里覆盖。 搜索tag = gawk / awk和CSV。 很难做到,特别是在给定sed的情况下,您已经显示了数据。 祝好运。

如果只期望数字,则以下表达式将起作用

sed -e 's/,/;/g' -e 's/\("[0-9][0-9]*\);\([0-9][0-9]*"\)/\1,\2/g'

例如

$ echo '1,3,"3,5",4,"5,5"' | sed -e 's/,/;/g' -e 's/\("[0-9][0-9]*\);\([0-9][0-9]*"\)/\1,\2/g'

1;3;"3,5";4;"5,5"

您不能只用。*替换[0-9] [0-9] *来保留任何,因为这会引起引号,。*过于贪婪并且匹配太多。因此,您必须使用[a-z0-9] *

$ echo '1,3,"3,5",4,"5,5",",6","4,",7,"a,b",c' | sed -e 's/,/;/g' -e 's/\("[a-z0-9]*\);\([a-z0-9]*"\)/\1,\2/g'

1;3;"3,5";4;"5,5";",6";"4,";7;"a,b";c

与第一种解决方案相比,它还具有易于理解的优点。我们只是用...代替每一个;然后更正每一个;用引号括起来,

您可以尝试这样的事情:

echo '1,3,"3,5",4,"5,5"' | sed -r 's|("[^"]*),([^"]*")|\1\x1\2|g;s|,|;|g;s|\x1|,|g'

它用 x1字符替换引号内的所有逗号,然后用分号替换所有剩余的逗号,然后将 x1字符替换回逗号。如果文件格式正确,最初没有 x1字符,并且在双引号内没有双引号的情况(例如" a"和" b"),这可能会起作用。

哎呀,编写一个脚本来捕获不良情况(\"上的误报可能比缺少"更好)。

我可以建议相同,但那不是作者想要的:)

在CSV中,引号中的双引号应写为"foo""bar"。 我知道,因为是在RFC 4180中进行了查找。(如果生成数据的人员从未查看过规范,这不是有帮助的……)

这可能对您有用:

echo '1,3,"3,5",4,"5,5"' |

sed 's/\("[^",]*\),\([^"]*"\)/\1

\2/g;y/,/;/;s/

/,/g'

1;3;"3,5";4;"5,5"

这是更长但更灵活的替代解决方案:

echo '1,3,"3,5",4,"5,5"' |

sed 's/^/

/;:a;s/

\([^,"]\|"[^"]*"\)/\1

/;ta;s/

,/;

/;ta;s/

//'

1;3;"3,5";4;"5,5"

我一直在这里等你的答案

@Jaypal谢谢,我已经提交了一个解决方案。 还添加了一个替代方案:)

使用gawk

gawk '{$1=$1}1' FPAT="([^,]+)|("[^"]+")" OFS=';' filename

测试:

[jaypal:~/Temp] cat filename

1,3,"3,5",4,"5,5"

[jaypal:~/Temp] gawk '{$1=$1}1' FPAT='([^,]+)|("[^"]+")' OFS=';' filename

1;3;"3,5";4;"5,5"

sed 分隔符打印_关于正则表达式:使用sed更改CSV分隔符相关推荐

  1. sed 分隔符打印_字符截取:cut,格式化输出:printf,字符截取:awk,文件或命令输出编辑:sed...

    cut 选项 文件名 -f 列号 提取第几列 -d 分隔符 指定分隔符把行分成多列 不能以空格为分隔符. [root@localhost ~]# cattestfile no. name sex sc ...

  2. sed 插入多行_文本三剑客之sed

    文本三剑客之sed sed介绍 sed 简介 sed 流编辑器.sed的全称:Stream EDitor 简称sed 是个流编辑器,sed是一个行编辑器.首先它是个流编辑器是实现文本流编辑的,所谓行编 ...

  3. shell脚本之正则表达式及sed,awk的使用

    一,正则表达式 1,正则表达式语法Regular Expression vim grep sed awk perl java nginx apache mail垃圾邮件过滤...等等都使用正则 什么叫 ...

  4. linux sed 正则提取字符串,linux正则表达式sed

    sed.awk工具可以实现文本替换并且把替换的文本输出到屏幕上 sed和awk都是流式编辑器,是针对文档的行来操作的.sed通常用来替换操作. 示例的文本内容,以下操作根据此文本.[root@yong ...

  5. 正则表达式grep sed awk总结

    1.grep命令总结 [root@cacti ~]# cat zh888.txt  //查看zh888.txt内容 123 456 abc def def [root@cacti ~]# grep - ...

  6. 正则表达式和sed使用

    文章目录 一 正则表达式 1.1 定义: 使用单个字符串来描述,匹配一系列符合某个句法规则的字符串 1.2正则表达式的分类: 1.3 Linux中文本处理工具 1.4 基础正则表达式元字符 除了普通字 ...

  7. 正则表达式和sed命令

    正则表达式 位置锚定 ^n 以n为开头 n$ 以n为结尾 ^root$ 匹配有且只有root的文件的其中行 ^$ 空行 1*$ 空行 <或\b 词首锚定,用于单词模式的左侧 >或\b 词尾 ...

  8. 正则表达式与扩展正则表达式(grep, sed, awk)

    Linux中用来在文件中搜索字符串的命令,如grep, sed, awk等命令支持正则表达式与扩展正则表达式. 1. 基础正则表达式 符号 解释 示例 * 匹配0次或多次 b.*t . 匹配任意字符 ...

  9. 打开高效文本编辑之门_调用Linux的sed命令

    Linux sed命令执行方式汇总案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器.Sed的命令执行主要介绍如何引用se ...

最新文章

  1. 所有java程序都有线程_若所有的用户线程都终止了,Java程序就会结束。( )_学小易找答案...
  2. Halcon 摄像机标定流程
  3. 同步pod时区与node主机保持一致
  4. Android音视频之AudioRecord录音(一)
  5. java futuretask get reject异常_FutureTask的get()方法之异常处理
  6. html加css绘制oprea的logo,拾人牙慧 – CSS3实现Opera浏览器的logo
  7. 淡定的写代码,淡定的人生
  8. 手机验证码免费10条\java、C#、html....
  9. android 第三方圆弧进度条,Android 圆弧进度条 水平进度条 水波进度条
  10. CentOS mysql重置密码
  11. html花瓣特效代码,网页上漂浮的花瓣
  12. 宁芝普拉姆键盘说明书以及键盘校验软件
  13. vue的网站用puppeteer做seo
  14. 《Cracking the Coding Interview程序员面试金典》----猫狗收容所
  15. java计算时间差_Java中计算两个日期的时间差
  16. 复旦情商课魅力女教师上课实录
  17. Vue开发实例(13)之axios和mockjs的安装与使用
  18. 易支付接口码支付个人免签源码开源版下载(简单的介绍)
  19. 全自动酶标仪故障分析与维护
  20. 2022-08-13 零基础吉他入门知识(三) 六线谱,和弦图和爬格子的知识补充,吉他中的和弦:大三和弦的各个和弦图理解

热门文章

  1. 关键部分CCriticalSection使用
  2. python抽样不同花色纸牌_Python 十几行代码实现你对一副扑克牌的所有幻想
  3. Nagios 监控平台搭建实验
  4. 数字集成电路设计-4-工具之ic compiler
  5. 公司计算机系统忘记用户密码怎么办,win10系统重置修改已经忘记的登录密码的解决步骤...
  6. https://zhuanlan.zhihu.com/p/33841176
  7. strncpy 用法注意
  8. js 循环渲染html页面
  9. 01-EasyUI_引言
  10. 软件测试缺陷报告单怎么填,缺陷报告(缺陷报告怎么写)