Eu faria isso:
names=$(sed s/^/Name=/ file1.txt)
ed file2.txt <<END
/^end$/i
$names
.
wq
END
agora:
$ cat file2.txt
<project>
<target>
start
Name=Ramesh
Name=Suresh
Name=Raman
end
</target>
</project>
Suponha que haja um arquivo1.txt no qual o conteúdo é escrito
Ramesh
Suresh
Raman
A partir do script de shell abaixo, estou lendo o nome do conteúdo do arquivo1 .txt e preparando o Name = $ line na instrução echo. (Não é possível mostrar no shell script, na linha 3 do sh está escrito.
while read -r line
do
echo "<Name="$line"/>"
done <"file.txt"
Existe outro xml file2.xml
<project>
<target>
start
end
</target>
</project>
Eu quero melhorar meu script de shell que irá inserir linhas no arquivo2.xml. Se em file2.xml, encontrarmos o padrão end , insira o conteúdo acima de end , cada um em uma nova linha. Alguém pode ajudar na modificação do script de shell?
A saída deve se parecer com: -
<project>
<target>
start
Name=Ramesh
Name=Suresh
Name=Raman
end
</target>
</project>
Eu faria isso:
names=$(sed s/^/Name=/ file1.txt)
ed file2.txt <<END
/^end$/i
$names
.
wq
END
agora:
$ cat file2.txt
<project>
<target>
start
Name=Ramesh
Name=Suresh
Name=Raman
end
</target>
</project>
Você poderia usar o awk
awk 'NR==FNR{Lines=Lines "Name=" $0 "\n";next}/end/{print Lines $0 ;next}1' file{1,2}
<project>
<target>
start
Name=Ramesh
Name=Suresh
Name=Raman
end
</target>
</project>
Tags shell