string de pesquisa usando grep ou sed de dois arquivos

0

Eu tenho dois arquivos de texto. Usando sed ou grep, como posso encontrar uma string correspondente e depois substituir a string de text2.txt?

Ele deve pesquisar qualquer coisa sob name="". Se encontrado, substitua-o pelo caminho="". output.txt tem dados de saída desejados.

test1.txt

domain merge_requests
abc frameworks merge_requests
dvc frame-test merge_requests

test2.txt

<project path="test/domain" name="device/common" />
<project path="test1/frameworks " name="test/frameworks" />
<name="test/frame-test" project path="test3/frame-test" />

output.txt

test/domain merge_requests
test1/frameworks merge_requests
test/frame-test merge_requests
    
por tipu 20.09.2016 / 19:06

1 resposta

0

Sua descrição faz outra coisa além do seu exemplo. Seguindo seu exemplo, você sempre deseja substituir a subsequência após a / da primeira string entre aspas pela primeira string entre aspas, removendo uma palavra anterior, se presente.

Assim, você pode primeiro coletar as primeiras strings entre aspas de test2.txt no buffer de retenção da seguinte forma:

sed 's/[^"]*"\([^"]*\)".*//;H;$!d;g' test2.txt

Em seguida, use esta coleção para a substituição anexando-a a cada retenção:

sed '/<.*>/{s/[^"]*"\([^"]*\)".*//;H;d};G;s/[^ ]* *\([^ ]\{1,\}\)\( [^\n]*\)\n.*\n\([a-z0-9]*\/\).*//;s/\n.*//' test2.txt test1.txt

O comando final s é cuidar das linhas sem correspondência; você pode deixar isso de lado se isso não acontecer no seu caso. Isso dá sua saída.

Se você quiser mais como descreveu, poderá adaptá-lo. Mas cuidado com a alteração da ordem de name e path .

    
por 13.04.2017 / 15:37

Tags