Shell anexa string após o último jogo

1

Eu gostaria de inserir uma string após a última correspondência, por exemplo:

String para inserir após a última instância da banana: Orange

Entrada

Apple
Banana
Apple
Banana

Resultado

Apple
Banana
Apple
Banana
Orange

Estou tentando fazer isso com tags XML. Eu já trabalhei como adicionar a tag de início.

    
por Lizzy 14.07.2015 / 06:27

3 respostas

1

tac a | sed '0,/Banana/{s/Banana/Orange\nBanana/}' | tac

Vai fazer isso!

EDIT: Modificado a partir da resposta a essa pergunta - link

    
por 14.07.2015 / 06:55
1

Curto e simples, para fazer exatamente o que foi perguntado:

printf '%s\n' '0?Banana?a' Orange . x | ex file.txt

Se você preferir ver o que será salvo no arquivo (em vez de salvar as modificações imediatamente), use:

printf '%s\n' '0?Banana?a' Orange . %p | ex file.txt

O que isso faz:

Desde o início do arquivo ( 0 ), procure para trás ( ?regex? ) para a próxima instância (envolvente) de "Banana" e, em seguida, anexe ( a ) linha "Laranja". O período finaliza o acréscimo e o x salva e sai.

    
por 09.11.2017 / 06:24
0
sed -e:n -e'/\n.*Banana/!{$!{N' \
         -e'/Banana/bn' -eb -e\}\
         -e's/\n/&Orange&/;t'   \
         -e'/Banana/a\' -eOrange\
    -e\} -e'P;D' <<\IN
Apple
Banana
Apple
Banana
IN
Apple
Banana
Apple
Banana
Orange

Isso deve funcionar de forma bastante confiável. Ele armazenará em buffer no espaço de padrões entre ocorrências de Banana na entrada - imprimindo para stdout todo o último grupo de buffers quando um novo é correspondido. E a última ocorrência de Banana deve ser tratada corretamente, independentemente de onde ocorra na entrada. E não precisa ler todo o seu arquivo de entrada antes de escrever qualquer saída.

    
por 14.07.2015 / 08:36