Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 替换两个字符之间的逗号_Linux_Shell_Sed - Fatal编程技术网

Linux 替换两个字符之间的逗号

Linux 替换两个字符之间的逗号,linux,shell,sed,Linux,Shell,Sed,我有一个txt文件,我需要用引号之间的空格替换逗号 例如: This,is,example,"need,delete comma",xxxx 结果应该是: This,is,example,"need delete comma",xxxx 我有这个命令,但它错了: sed -i '/^"/,/^"/s/.,/ /' output.txt 试试这个: awk'NR%2-1{gsub(/,/,“”)}1'RS=\“ORS=\”input.txt>output.txt 输入: 例如,“需要,删除逗

我有一个txt文件,我需要用引号之间的空格替换逗号

例如:

This,is,example,"need,delete comma",xxxx
结果应该是:

This,is,example,"need delete comma",xxxx
我有这个命令,但它错了:

sed -i '/^"/,/^"/s/.,/ /' output.txt
试试这个:

awk'NR%2-1{gsub(/,/,“”)}1'RS=\“ORS=\”input.txt>output.txt

输入:

例如,“需要,删除逗号”,xxxx

输出:

例如,“需要删除逗号”,xxxx

复合awk解决方案:

示例
testfile

This,is,example,"need,delete comma",xxxx
asda
asd.dasd,asd"sdf,dd","sdf,sdfsdf"
"some,text,here" another text there""

工作:

awk -F'"' '$0~/"/ && NF>1{ for(i=1;i<=NF;i++) { if(!(i%2)) gsub(/,/," ",$i) }}1' OFS='"' testfile

下面的awk如何,我只查找“…”之间的匹配,然后简单地删除该匹配中的所有逗号。然后将其新值替换为旧的“.”值

EDIT1:在看到RomanPerekhrest的输入文件后,上面的代码有一点变化,这将禁止在任何行中更改“,”

awk '{match($0,/\".*\"/);val=substr($0,RSTART,RLENGTH);gsub(/[^","],/," ",val);gsub(/\".*\"/,val,$0)} 1'  Input_file
例如,echo'This是“need,delete comma”,xxxx'| awk-F\“{sub(/,/,”“,$2);print}'OFS=\”


例如,“需要删除逗号”,xxxx

我很好奇,为什么要替换逗号?您是否试图解决没有正确的CSV解析器的问题?这将在多行输出的末尾添加尾随的
。您可以从答案中对
测试文件进行测试
awk '{match($0,/\".*\"/);val=substr($0,RSTART,RLENGTH);gsub(/,/," ",val);gsub(/\".*\"/,val,$0)} 1'  Input_file
awk '{match($0,/\".*\"/);val=substr($0,RSTART,RLENGTH);gsub(/[^","],/," ",val);gsub(/\".*\"/,val,$0)} 1'  Input_file