大家好,
我想知道如何修改引号内的内容,而引号外的内容保持不变。
输入行:
,,,"Investigacion,,, desarrollo",,,
输出行:
,,,"Investigacion, desarrollo",,,
初步尝试:
sed 's/\"",,,""*/,/g'
但是没有任何反应,提前感谢任何线索
最佳答案
执行此操作的惯用 awk 方法很简单:
$ awk 'BEGIN{FS=OFS="\""} {sub(/,+/,",",$2)} 1' file
,,,"Investigacion, desarrollo",,,
或者如果您可以在每一行中包含一组以上的带引号的字符串:
$ cat file
,,,"Investigacion,,, desarrollo",,,"foo,,,,bar",,,
$ awk 'BEGIN{FS=OFS="\""} {for (i=2;i<=NF;i+=2) sub(/,+/,",",$i)} 1' file
,,,"Investigacion, desarrollo",,,"foo,bar",,,
这种方法之所以有效,是因为第一个 "
之前的所有内容都是字段 1,从那里到第二个 "
的所有内容都是字段 2,依此类推, 之间的所有内容>"
s 是偶数字段。只有当您的字段中有换行符或转义双引号时它才会失败,但这也会影响所有其他可能的解决方案,因此您需要将这样的案例添加到如果你想要一个处理它的解决方案,你的示例输入。
关于bash - 修改引号内的内容,BASH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144177/