同じ行で複数の項目の一致を制御するためにsedに式を作成する方法

同じ行で複数の項目の一致を制御するためにsedに式を作成する方法

持っていると言えます。

apples bananas oranges pomelos oranges 

バナナとグレープフルーツは別のロープです。

私が使用するのは行のsed 's/apples.*oranges/applesandfriends/'2番目と一致します。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 

関連情報