一連の単語を文字列の末尾に移動

一連の単語を文字列の末尾に移動

次の文字列があります。

"5  S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue"

文字列の末尾に移動する必要があります。すべてcommentwordで始まりますtext

開始は常に becomment= で、区切り文字は常にですfruitcomment=...と区切り記号の間の値fruitは可変です。

どんな提案がありますか?

ベストアンサー1

文字列がシェル変数にあり、シェルがある場合は、zsh次のことができます。

string='5  S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue'
new_string=${string/(#b)(comment=*)(fruit*)/$match[2] $match[1]}

シェルが次の場合ksh93

new_strong=${string//@(comment=*)@(fruit*)/\2 \1}

シェルがPOSIXシェルの場合(たとえば、これら2つのシェルbashまたはsh最新のシステムのシェル):

a=${string%%comment=*}
b=${string#"$a"}
b=${b%fruit*}
c=${string#"$a$b"}
new_string=$a$c$b

ファイルの各行に対して、次の操作を行います。

sed 's/\(comment=.*\)\(fruit.*\)/\2 \1/' < file

複数の行/文字列がある場合、3つの部分はすべて左端からcomment=右端に一致します。fruit

おすすめ記事