-i
só pode ser usado com sed se você estiver passando um arquivo, significa "substituir inline". Sem isso, a saída do sed seria gravada em stdout
(geralmente a saída do console). Com -i
, ele faz um substituto in-line , ou seja, fazendo substituições no próprio arquivo.
O próximo código lê o conteúdo de jasperreports.properties
na variável $input
(linha 1) e localiza a sequência a ser substituída (linha 2).
Na terceira linha, ele envia a string de entrada e o canaliza em sed
para substituição. sed
envia a string para stdout
, que será capturada por $(
e )
e, portanto, será armazenada em $input
.
read input < jasperreports.properties
find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print }')
input=$(echo "$input" | sed "s/$find/charts/")
Se você deseja aplicar as alterações imediatamente ao arquivo:
find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print }')
sed "s/$find/charts/" -i jasperreports.properties
Em man sed
:
s/regexp/replacement/
Attempt to match regexp against the pattern space. If
successful, replace that portion matched with replacement. The
replacement may contain the special character & to refer to that
portion of the pattern space which matched, and the special
escapes through to refer to the corresponding matching
sub-expressions in the regexp.