Existem vários problemas com esse snippet. Eu recomendo que você aprenda um pouco melhor a sintaxe do bash antes de escrever scripts nele.
De qualquer forma, se você quiser editar um arquivo, você quer um editor de arquivos. sed não é um editor de arquivos. Eu acredito que isso vai fazer o que você quiser.
#!/bin/bash
read -p "Enter the ip address: " ipnumber
ed -s application.properties << EOF
/:@/c
connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz
.
w
EOF
O que esse script diz é: /:@/c
- na primeira linha que contém :@
, c altere a linha com tudo seguindo até uma linha contendo apenas .
. Então w
to w escreve as alterações no arquivo.
Veja link para obter ajuda com a edição usando ed e link para aprender bash.
Atualização:
sed pode ser usado para conseguir o mesmo, mas não pode editar arquivos, só pode ser usado para criar um novo arquivo.
# POSIX
sed "/:@/c\
connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz" application.properties
Aqui sed irá mostrar o arquivo com as alterações aplicadas. Você pode redirecionar para um novo arquivo e movê-lo para o antigo. O GNU sed também possui uma opção -i
não padronizada que faz a última parte de forma transparente. O GNU sed também não requer que você tenha essa nova linha no script sed.
# GNU sed
sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz" application.properties
Observe que o ed só substituirá a linha primeiro que corresponde ao regex, enquanto o sed substituirá todas as linhas correspondentes ao regex.