如何在sed中编写表达式来控制匹配同一行中的多个出现

如何在sed中编写表达式来控制匹配同一行中的多个出现

可以说我有

apples bananas oranges pomelos oranges 

香蕉和柚子是不同的绳子。

我使用,它匹配该行的sed 's/apples.*oranges/applesandfriends/'第二个。oranges

如何控制oranges匹配哪个出现?

我得到的结果是

applesandfriends

我想要的结果是

applesandfriends pomelos oranges

答案1

使用sed,用第 n 个关键字(橙色)替换特殊字符,然后执行匹配直到该字符:

foo="apples bananas oranges pomelos oranges "

echo $foo | sed 's/oranges/#/1' | sed 's/apples.*#/applesandfriends/'

输出:

applesandfriends pomelos oranges

答案2

我通过删除文件中第一次出现的橙色使用了以下方法

perl -pne "s/ /\n/g" o.txt|sed '/^$/d'| sed '0,/oranges/s/oranges//g'| sed '/^$/d'| perl -pne "s/\n/ /g"| sed "s/apples.*bananas/applesandfriends/g"

输出

applesandfriends pomelos oranges 

相关内容