sed 分隔符打印_关于正则表达式:使用sed更改CSV分隔符
我有一个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分隔符相关推荐
- sed 分隔符打印_字符截取:cut,格式化输出:printf,字符截取:awk,文件或命令输出编辑:sed...
cut 选项 文件名 -f 列号 提取第几列 -d 分隔符 指定分隔符把行分成多列 不能以空格为分隔符. [root@localhost ~]# cattestfile no. name sex sc ...
- sed 插入多行_文本三剑客之sed
文本三剑客之sed sed介绍 sed 简介 sed 流编辑器.sed的全称:Stream EDitor 简称sed 是个流编辑器,sed是一个行编辑器.首先它是个流编辑器是实现文本流编辑的,所谓行编 ...
- shell脚本之正则表达式及sed,awk的使用
一,正则表达式 1,正则表达式语法Regular Expression vim grep sed awk perl java nginx apache mail垃圾邮件过滤...等等都使用正则 什么叫 ...
- linux sed 正则提取字符串,linux正则表达式sed
sed.awk工具可以实现文本替换并且把替换的文本输出到屏幕上 sed和awk都是流式编辑器,是针对文档的行来操作的.sed通常用来替换操作. 示例的文本内容,以下操作根据此文本.[root@yong ...
- 正则表达式grep sed awk总结
1.grep命令总结 [root@cacti ~]# cat zh888.txt //查看zh888.txt内容 123 456 abc def def [root@cacti ~]# grep - ...
- 正则表达式和sed使用
文章目录 一 正则表达式 1.1 定义: 使用单个字符串来描述,匹配一系列符合某个句法规则的字符串 1.2正则表达式的分类: 1.3 Linux中文本处理工具 1.4 基础正则表达式元字符 除了普通字 ...
- 正则表达式和sed命令
正则表达式 位置锚定 ^n 以n为开头 n$ 以n为结尾 ^root$ 匹配有且只有root的文件的其中行 ^$ 空行 1*$ 空行 <或\b 词首锚定,用于单词模式的左侧 >或\b 词尾 ...
- 正则表达式与扩展正则表达式(grep, sed, awk)
Linux中用来在文件中搜索字符串的命令,如grep, sed, awk等命令支持正则表达式与扩展正则表达式. 1. 基础正则表达式 符号 解释 示例 * 匹配0次或多次 b.*t . 匹配任意字符 ...
- 打开高效文本编辑之门_调用Linux的sed命令
Linux sed命令执行方式汇总案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器.Sed的命令执行主要介绍如何引用se ...
最新文章
- 所有java程序都有线程_若所有的用户线程都终止了,Java程序就会结束。( )_学小易找答案...
- Halcon 摄像机标定流程
- 同步pod时区与node主机保持一致
- Android音视频之AudioRecord录音(一)
- java futuretask get reject异常_FutureTask的get()方法之异常处理
- html加css绘制oprea的logo,拾人牙慧 – CSS3实现Opera浏览器的logo
- 淡定的写代码,淡定的人生
- 手机验证码免费10条\java、C#、html....
- android 第三方圆弧进度条,Android 圆弧进度条 水平进度条 水波进度条
- CentOS mysql重置密码
- html花瓣特效代码,网页上漂浮的花瓣
- 宁芝普拉姆键盘说明书以及键盘校验软件
- vue的网站用puppeteer做seo
- 《Cracking the Coding Interview程序员面试金典》----猫狗收容所
- java计算时间差_Java中计算两个日期的时间差
- 复旦情商课魅力女教师上课实录
- Vue开发实例(13)之axios和mockjs的安装与使用
- 易支付接口码支付个人免签源码开源版下载(简单的介绍)
- 全自动酶标仪故障分析与维护
- 2022-08-13 零基础吉他入门知识(三) 六线谱,和弦图和爬格子的知识补充,吉他中的和弦:大三和弦的各个和弦图理解
热门文章
- 关键部分CCriticalSection使用
- python抽样不同花色纸牌_Python 十几行代码实现你对一副扑克牌的所有幻想
- Nagios 监控平台搭建实验
- 数字集成电路设计-4-工具之ic compiler
- 公司计算机系统忘记用户密码怎么办,win10系统重置修改已经忘记的登录密码的解决步骤...
- https://zhuanlan.zhihu.com/p/33841176
- strncpy 用法注意
- js 循环渲染html页面
- 01-EasyUI_引言
- 软件测试缺陷报告单怎么填,缺陷报告(缺陷报告怎么写)