bash - 修改引号内的内容,BASH

标签 bash awk sed grep

大家好,

我想知道如何修改引号内的内容,而引号外的内容保持不变。

输入行:

,,,"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/

相关文章:

linux - Sed 命令搜索一行并取消注释以下行

linux - 我可以使用 unix utils 以编程方式将 "burn in"ANSI 控制代码写入文件吗?

java - 如何像在后台那个目录中一样执行脚本(例如 mvnw)?

Bash if 语句中的正则表达式匹配

linux - 从 TL1 终端退出的 Bash 命令

string - awk 字符串替换

Linux加入2行然后根据分隔符输入新行

linux - 尝试了解 PATH 在 Linux 上的设置方式(Ubuntu 16.04 上的 bash)

linux - 如何将列输出合并到前一列的行尾?

sed - Linux 中的 sed b 命令是什么?