gpt4 book ai didi

csv - 使用 sed 填充 CSV 中的空白字段

转载 作者:行者123 更新时间:2023-12-04 05:12:08 25 4
gpt4 key购买 nike

假设我们在 CSV 中有一行看起来像这样:

|Foo|,,,,,,,,|Bar|,,,,,

哪里 |是封装器,和 ,是定界符(如您所料)。

但是假设您有一些代码需要填充这些空字段,而您想将此行转换为如下所示:
|Foo|,||,||,||,||,||,||,||,|Bar|,||,||,||,||,

(我们可以稍后处理尾随逗号)
我试图在这个 CSV 上使用这个 sed 命令来获得所需的结果:
sed 's/,,/,||,/g'

但是,正则表达式模式 ,,宽度不为零,所以当它扫描这条线时,它会移动两个,即使我们只处理了一个字段。结果是这样的:
|Foo|,||,,||,,||,,||,|Bar|,||,,||,,

问题是,当我们在替换中做到这一点时:
|Foo|,||,,,,,,,|Bar|,,,,,

我们已经“处理”了 || 周围的逗号, 我们在我们正则表达式的最后一个逗号之后移动到下一对,这不涉及 ,||, 的最后一个.

如何使用 sed 进行此替换?

最佳答案

更优雅的方法是使用条件分支:

$ sed ':a;s/,,/,||,/;ta' <<< '|Foo|,,,,,,,,|Bar|,,,,,'
|Foo|,||,||,||,||,||,||,||,|Bar|,||,||,||,||,

来自 man sed :

t label

If a s/// has done a successful substitution since the last input line was read and since the last t or T command, then branch to label; if label is omitted, branch to end of script.

关于csv - 使用 sed 填充 CSV 中的空白字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14777643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com