Como faço para substituir uma string por um cifrão no sed?

2

Eu quero substituir esta string:

export TODO_FILE="$TODO_DIR/todo.txt

com:

export TODO_FILE="$TODO_DIR/writing.txt"

no arquivo ~/.todo/config . Eu corri com:

sed -i 's/export TODO_FILE="$TODO_DIR/todo.txt"/export TODO_FILE="$TODO_DIR/writing.txt"/g' ~/.todo/config

Mas diz:

sed: -i may not be used with stdin

O que devo fazer?

    
por rahmat 09.02.2015 / 16:42

3 respostas

2

Tente isso (Chris, você está muito perto):

sed -i '' 's|export TODO_FILE="$TODO_DIR/todo.txt"|export TODO_FILE="$TODO_DIR/writing.txt"|g' ~/.todo/config
    
por 09.02.2015 / 17:51
1

Melhor primeiro corresponder a linha e depois substituir a parte

sed -i '/export TODO_FILE/ s/todo.txt/writing.txt/' ~/.todo/config

Isso se torna curto quando você tem uma variável de caminho muito longa.

e, como mencionado na resposta anterior, use outro separador ao lidar com o caminho.

    
por 09.02.2015 / 16:55
1

Eu não acho que o problema seja o cifrão, porque ele está entre aspas simples. Supondo que você esteja usando bash, as strings entre aspas simples não são expandidas por variável .

Um dos seus problemas é que você escolheu um caractere separador (o primeiro caractere após o comando "s") que existe em suas strings find / replace - "/". Isso está sendo interpretado de maneira diferente do que você está esperando. Você deve escolher um caractere diferente que não apareça nas strings de localizar / substituir, como "|".

sed -i 's|export TODO_FILE="$TODO_DIR/todo.txt"|export TODO_FILE="$TODO_DIR/writing.txt"|g' ~/.todo/config

No entanto, isso não explica sua mensagem de erro específica.

Talvez você esteja usando a versão do BSD, que aparentemente trata o -i de forma diferente ?

    
por 09.02.2015 / 16:50

Tags