Procure uma linha e substitua a linha

0
false###File.txt 
many rows
###online = false --> ONE SHOT import (delete all table contents before importing)
###online = true  --> DIFFERENTIAL import (import without clean the table contents)
###online = true

many rows

Eu quero selecionar linhas tendo on-line sozinho e substituir true por false, mas não precisa ser o número de linha 3, ele pode vir em qualquer lugar no arquivo

Minha tentativa: test.sh

online=true
perl -i -p -e "s/^(online[ ]*=[ ]*).*$/ $online/" File.txt 

Ele faz o trabalho, mas adiciona um espaço antes de falso. Alguém pode corrigir o comando acima para que ele não adicione um espaço antes da palavra true

    
por Peck 17.03.2015 / 12:25

2 respostas

2

Você pode tentar sed :

sed -i '3s/true/false/' file.txt

Se você quiser manter o arquivo original como file.txt.bak :

sed -i.bak '3s/true/false/' file.txt

Além disso, se você quiser substituir mais de uma ocorrência de true por false na mesma linha:

sed -i.bak '3s/true/false/g' file.txt

EDITAR: De acordo com a sua consulta esclarecida, tente o seguinte:

sed -i.bak '/DIFFERENTIAL\|[^t][^r][^u][^e]$/!s/true/false/' file.txt

Isso substituirá "true" por "false" nas linhas onde não há "DIFERENCIAL" e também "true" no final da linha.

    
por 17.03.2015 / 12:31
0

Encontrei o seguinte comando que me ajudará:

sed '/DIFFERENTIAL/!s/true/false/g'
    
por 17.03.2015 / 13:01