gpt4 book ai didi

regex - sed 和 regex 替换 ',' 除了在字符串内

转载 作者:行者123 更新时间:2023-12-01 07:07:14 25 4
gpt4 key购买 nike

我有以下模式的输入

10,0,'string1_string2,_string3','',8,0,0,0.59,'20140101205216','20140128074836',584266915,5934

并且我想使用 sed 将所有逗号“,”字符替换为制表符。约束是不要替换文本字符串中的“,”(即 'string1_string2,_string3' 中的逗号不应替换为制表符)。执行此操作的正则表达式是 ,(?!,_)。

但是下面的 sed 不起作用。我也尝试了所有转义排列。

sed s/",\(\?\!,_\)"/"\t"/g 

有办法吗?

最佳答案

在 Mac OS X 10.9.1 上,您可以使用:

sed -E -e "s/('[^']*'|[^,]*),/\1X/g"

除非您将 X 替换为实际的选项卡。对于您的输入行,会产生:

10X0X'string1_string2,_string3'X''X8X0X0X0.59X'20140101205216'X'20140128074836'X584266915X5934

在您想要制表符的地方有 X。使用 GNU sed,您可以使用 -r 代替 -E(尽管它也可以识别 -E) . Mac sed 不会将 \t 展开为标签; GNU sed 会。使用 Bash,您可以使用 ANSI-C 引用机制让 shell 在传递给 sed 的字符串中嵌入制表符:

sed -E -e "s/('[^']*'|[^,]*),/\1"$'\t'"/g"

没有扩展的正则表达式(由-r-E 激活),不值得在sed 中尝试;请改用 awk

正则表达式查找或者一个单引号后跟零个或多个非引号和一个单引号零个或多个非逗号后跟一个逗号,并将其替换为内存中的 either/or 字符串和“制表符”(使用 X 表示制表符,因为它更显眼)。


devnull points out上面的答案替换了行尾字符串中的逗号。有一个解决方法:

sed -E -e "s/('[^']*'|[^,]*)(,|$)/\1"$'\t'"/g; s/"$'\t'"$//"

分号前的s///g在每行末尾添加制表符;分号后的 s/// 删除刚刚添加的选项卡。

关于regex - sed 和 regex 替换 ',' 除了在字符串内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648375/

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