regex - Unix:查找连续逗号并将其替换为连续管道
问题描述
我正在将双引号 CSV 转换为 Unix 中管道分隔的 txt 文件。我已使用以下 sed 命令将“,”替换为 | 然后删除开始和结束双引号。
sed -e 's/","/|/g' -e 's/"//g' filenm.csv > filenm.txt
但是该文件似乎有没有双引号的连续逗号,并且它们没有被替换。
Col1|col2|col3|col4|col5|col6|col7|col8
Val1|val2|val3,,,,val7|val8
现在我想将所有这些连续的逗号转换为连续的管道,因为它们表示空字段或空字段。
其他字段在字段值内也有不应更改的逗号。
我尝试在下面使用,但没有工作。
sed -e 's/,{1,\}/|{1,\}/g' filenm.csv > filenm.txt
在记事本中打开的示例 csv 文件:
"ID","Name","DOB","Age","Address","City","State","Country","Phone number"
"123","ABC","12/20/2020","15","No.38,3rd st, RRR NNN, TRT",,,,"9999999999"
"456","DEF","12/20/2020",,,,,"test-country","9999999999"
"465","XYZ",,,"No.38,3rd st, RRR NNN, TRT",,,,"9999999999"
我希望这有助于重现问题并解决。
提前致谢....
解决方案
这可能对您有用(GNU sed):
sed -E ':a;s/^(("[^",]*",+)*"[^",]*),/\1\n/;ta;y/,\n/|,/' file
用换行符迭代替换,
's between "
's,然后将,
's 翻译为|
's,将换行符翻译为,
's。
推荐阅读
- python - 将熊猫数据框的水平值转换为垂直值
- html - 向下滚动时如何修复表格中的两个行标题?
- batch-file - 批处理文件:在特定操作系统上运行特定部分
- kendo-ui - 为 kendo-angular-editor 设置默认字体系列
- javascript - JavaScript 滑块上的 TypeError 类名
- javascript - 解析 JSON 对象时如何保留键的顺序
- android - 获得 500 - Youtube 广播插入 API 遇到内部错误
- matlab - 对数据使用 pol2cart 并从中获取图像
- c++ - ')' 标记之前的预期主表达式
- c# - ASP.NET Core 3.1 Windows 身份验证不断提示输入凭据