次の文字列があります。
"5 S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue"
文字列の末尾に移動する必要があります。すべてcomment
wordで始まりますtext
。
開始は常に becomment=
で、区切り文字は常にですfruit
。comment=
...と区切り記号の間の値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