使用 sed 仅替换前两个正则表达式捕获不同的字符串

使用 sed 仅替换前两个正则表达式捕获不同的字符串

因此,我尝试使用 sed 将正则表达式模式的两个实例更改为两个不同的字符串,例如:

sed -E "s/\\t([A-Za-z]|[-])+$/\\t`get_addr.py -1`/" /path/to/file.ext
sed -E "s/\\t([A-Za-z]|[-])+$/\\t`get_addr.py -2`/" /path/to/file.ext

我尝试了很多事情,并进行了大量的手册页搜索,但我只是不太清楚如何实现它。

有没有办法告诉 sed 用不同的字符串替换每个匹配,例如

sed -E "s/\\t([A-Za-z]|[-])+$/[1st replacement],[2nd replacement]/" /path/to/file.ext

和/或有没有一种方法可以在正则表达式中指定我正在寻找第 n 个匹配项,以便我可以调用 sed 两次?

答案1

至少在 GNU sed 中,我认为你可以做类似的事情

sed -e '0,/pattern/ s//replacement1/' -e '0,/pattern/ s//replacement2/' file

例如给定一个文件

abc
def
abc
ghi
abc
jkl

然后

$ sed -e '0,/abc/ s//XYZ/' -e '0,/abc/ s//UVW/' file
XYZ
def
UVW
ghi
abc
jkl

相关内容