único comando para sed e usar o valor de entrada duas vezes de forma diferente

único comando para sed e usar o valor de entrada duas vezes de forma diferente

Eu tenho um arquivo com valores de entrada na forma de: input-prefix:value.

Preciso substituir input-prefixduas vezes por uma substituição diferente e passá-la para um comando como my-command replace1-prefix:value replace2-prefix:value. Isso é possível com um único comando ou preciso fazer um script?

Com um valor é simples

cat my-input-file | sed 's/input-prefix/replace1-prefix/' | xargs -r my-command

TIA por qualquer assistência,

C.

Responder1

Você pode agrupar partes de um padrão \(\)e posteriormente consultá-lo por \1(ou \2... \9se você tiver mais grupos em um padrão):

s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/

Responder2

Também é simples com vários valores. Primeiro, você pode pular o comando cat em seu pipe, pois sed irá ler o arquivo e imprimir sua saída em STDOUT. E sedfunciona da maneira que @Philippos descreveu (e \1será usado duas vezes por pertencer ao primeiro grupo de captura). Basta remover o eco no comando xargs para executar seu comando. Se quiser ver o comando que foi chamado, você pode adicionar o parâmetro -tpara ver o comando ou -ppara executá-lo de forma interativa. Portanto, você precisa declarar sim/não antes de executar o comando.

user@pc:/tmp$ cat inputfile.txt 
input-prefix1:value1
input-prefix:value
input-prefix2:value2

user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt
input-prefix1:value1
replace1-prefix:value
replace2-prefix:value
input-prefix2:value2 

user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt | xargs -r echo my-command

Nota curta: Isso pressupõe que seu prefixo de entrada é a primeira coisa na linha que você deseja substituir e o valor é todo o resto da linha atrás dos dois pontos. Além disso, o gmodificador no sedcomando substituirá todas as suas ocorrências input-prefix:dentro do arquivo inputfile.txt.

informação relacionada