Unix 使用sed命令从第2次替换到第4次

Unix 使用sed命令从第2次替换到第4次,unix,sed,Unix,Sed,我想用“@”替换从第2次出现到第4次出现的p sed 's/p/@/2g' file.txt 此命令从第二次出现到最后一次出现“p”进行替换。 但是我想从第二名换到第四名。 那么怎么做呢?假设这是bash或zsh,您可以使用大括号扩展 sed -e's/p/@/2'{,,} file {,}将重复-e的/p/@/2'三次,因此它将取代第二、第三和第四个ps.这可能适合您(GNU-sed): 用换行符替换一行上的第五个和后续的p,用@替换第二个和后续的p,最后将换行符恢复为p 或者,向奥古斯·

我想用“@”替换从第2次出现到第4次出现的p

sed 's/p/@/2g' file.txt
此命令从第二次出现到最后一次出现“p”进行替换。 但是我想从第二名换到第四名。
那么怎么做呢?

假设这是bash或zsh,您可以使用大括号扩展

sed -e's/p/@/2'{,,} file
{,}
将重复
-e的/p/@/2'
三次,因此它将取代第二、第三和第四个
p
s.

这可能适合您(GNU-sed):

用换行符替换一行上的第五个和后续的
p
,用
@
替换第二个和后续的
p
,最后将换行符恢复为
p

或者,向奥古斯·伊斯梅尔致敬:

sed -e's/p/@/'{4..2} file

这使用bash扩展为出现的
p
的2到4生成替换字符串,但相反(正向替换将不考虑以前的替换)。

只需在不使用
g
的情况下重复该命令三次:
sed-e's/p/@/2'-e's/p/@/2'-e's/p/@/2'文件即可,有没有其他方法可以解释你在问题中的要求。如果一个解决方案适合你,为什么不使用它呢?谢谢你的解决方案。但是我只是想知道还有其他的方法。在解释了为什么
sed-e的s/p//2'-e的s/p//2'-e的s/p//2'-e的s/p//2'
或者
sed-e的/p//2'{,}
不是你需要的。谢谢这个方法,有没有其他方法使用sed命令。也许
sed-e的/p/'{4..2}文件
sed -e's/p/@/'{4..2} file