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
.