Como substituir strings de texto lendo em lista usando sed

1

Estou tentando criar um script sed para ser executado a partir do shell. Eu preciso ser capaz de ler em uma lista de UUIDs de um arquivo externo, que contém duas colunas

origtexta replacementa
origtextb replacementb
origtextc replacementc

O script precisa agir recursivamente em todos os arquivos txt abaixo da pasta atual, procure por qualquer instância de 'origtext?' e substituir com o texto correspondente da coluna 2. Seria ótimo se o script pudesse ser armazenado em / home / myuser / Scripts / e ser colocado em alias para poder ser executado em qualquer lugar que eu invocasse, e também seria bom se o script salvou o arquivo txt original como .txt.orig antes de alterá-lo.

Eu tenho testado até agora:

#!/bin/sed
while read n k; do sed -i 's/$n/$k/g' *.txt; done < list

que eu encontrei neste segmento: Como substituir uma lista de strings por outra lista

Parece estar fazendo alguma coisa, porque as datas dos arquivos mudam para a data / hora atual, mas nenhum texto é realmente substituído, então não tenho certeza de como fazer isso funcionar.

    
por graphics.guy 01.03.2014 / 17:53

1 resposta

2

Eu gostaria de me agarrar a isso. construa o script sed dinamicamente

while read uuid uuid_alias; do 
    sed_script+="s/$uuid/$uuid_alias/g;"
done < list

find . -type f -name \*.txt -exec sed -i "$sed_script" '{}' +

Você precisa tentar chamar o sed o mais rápido possível para a eficiência do tempo.

Observe também que $ variáveis não são expandidas dentro de 'aspas simples' - as "aspas duplas" permitem a expansão das variáveis.

    
por 01.03.2014 / 18:16