gpt4 book ai didi

regex - Sed 在第二次出现时替换

转载 作者:行者123 更新时间:2023-11-29 09:04:27 25 4
gpt4 key购买 nike

我想用 sed 删除一个模式,只在第二次出现时。这就是我想要的,删除一个模式,但在第二次出现时。

file.csv 中的内容:

a,Name(null)abc.csv,c,d,Name(null)abc.csv,f
a,Name(null)acb.csv,c,d,Name(null)acb.csv,f
a,Name(null)cba.csv,c,d,Name(null)cba.csv,f

想要的输出:

a,Name(null)abc.csv,c,d,Name,f
a,Name(null)acb.csv,c,d,Name,f
a,Name(null)cba.csv,c,d,Name,f

这是我尝试过的:

sed -r 's/(\(null)\).*csv//' file.csv

这里的问题是正则表达式太贪心了,但我无法停止。我也试过这个,跳过第一次出现的“null”:

sed -r '0,/null/! s/(\(null)\).*csv//' file.csv

也尝试过,但贪婪的正则表达式仍然是问题。

sed -r 's/(\(null)\).*csv//2' file.csv

我读过 ? 可以使正则表达式“懒惰”,但我不能让它锻炼。

sed -r 's/(\(null)\).*?csv//' file.csv

最佳答案

sed 确实提供了一种简单的方法来指定要替换的匹配项。只需在分隔符后添加数字

$ sed 's/(null)[^.]*\.csv//2' ip.csv
a,Name(null)abc.csv,c,d,Name,f
a,Name(null)acb.csv,c,d,Name,f
a,Name(null)cba.csv,c,d,Name,f

$ # or [^,] if there are no , within fields
$ sed 's/(null)[^,]*//2' ip.csv
a,Name(null)abc.csv,c,d,Name,f
a,Name(null)acb.csv,c,d,Name,f
a,Name(null)cba.csv,c,d,Name,f

此外,在不使用扩展正则表达式时无需转义()

关于regex - Sed 在第二次出现时替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46238843/

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