Como modificar um conteúdo de determinada linha em um arquivo usando scripts do Shell, quando o texto nessa linha é repetido muitas vezes em outras linhas também

0

Como modificar um conteúdo de determinada linha em um arquivo usando scripts do Shell, quando o texto nessa linha é repetido muitas vezes em outras linhas também. Por exemplo, no arquivo que tenho:

##############################
[CC-COARSEGRID-PRECONDITIONER]
##############################
# Relaxation parameter
domega = 1.0
##############
[CC-PRECONDMK]
##############
# Relaxation parameter
domega = 0.9

Eu quero mudar a última linha para: domega = 0,4

    
por EngDR 21.10.2015 / 15:07

1 resposta

2

Você pode usar sed / tac :

tac file | sed '0,/domega = .*/s/domega = .*/domega = 0.4/' | tac
  • tac file inverte o arquivo.
  • 0,/domega = .*/ apenas faz a substituição entre a linha 0 e a primeira ocorrência de domega (agora é a última).
  • s/domega = .*/domega = 0.4/ , em seguida, faça a recolocação.
  • tac inverte novamente.
por 21.10.2015 / 15:24