Com o GNU sed
:
sed '/binaries=(/,/)/{
//!d
/)/e uname
}'
Substitua uname
pelo seu comando.
Eu tenho um arquivo com o seguinte formato:
Whatever1
Whatever2
Whatever3
binaries=(
text1
bin2
ohhh3
)
Whatever4
Whatever5
Whatever6
Eu preciso substituir as linhas internas binaries=(
e )
com uma saída de comando.
Eu posso escolher o seguinte bloco com um comando como sed -n -e '/binaries=(/,/)/p' filename
:
binaries=(
text1
bin2
ohhh3
)
Ou ainda melhor com este awk '/binaries/,/)/{if(!/binaries|)/)print}' filename
:
text1
bin2
ohhh3
Mas eu preciso reescrever o arquivo original e não sei como continuar.
Eu faria isso no awk, por exemplo:
awk '
f && /)/ { f=0 }
!f
!f && /binaries=\(/ { f=1 ; p=1 }
p { system ("your_command") ; p=0 }
'
onde "your_command" definirá a substituição.
Explicação: O sinalizador f
controlará a máquina de estado; se estiver definido, você está no bloco que será substituído. Com a correspondência do padrão inicial e final, o sinalizador é alterado de acordo. Enquanto você está no bloco, a chamada do sistema será executada; o sinalizador p
é usado para imprimi-lo apenas uma vez.
Para substituir seu arquivo original, crie um novo arquivo e sobrescreva o original depois, ou use uma versão recente do GNU awk
com a opção -i inplace
.
Tags text-processing awk sed shell