Mover um intervalo de palavras para o final da string

0

Eu tenho a seguinte string:

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

Eu preciso mover para o final da string, tudo o que começa com comment para a palavra text .

O início é sempre comment= e o delimitador é sempre fruit . O valor entre comment= ... e fruit delimiter é variável.

alguma sugestão?

    
por Teb 27.05.2015 / 16:53

1 resposta

1

Se essa string estiver em uma variável shell e esse shell for zsh , você poderá fazer isso:

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

Se esse shell for ksh93 :

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

Se esse shell for um shell POSIX (como esses dois, bash ou sh dos sistemas modernos):

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

Para cada linha de um arquivo:

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

Todos os três corresponderiam à parte do comment= da esquerda para a direita fruit se houvesse mais de um por linha / string.

    
por 27.05.2015 / 17:04