sed em bash com variáveis e aspas duplas causam erro não terminado

1

Eu tenho o seguinte código e continuei recebendo o unterminated error . Por exemplo, $1 pode ser ABC-TXT-123 e quero substituir TEXT abc.123 no arquivo por ABC-TXT-123 .

#!/bin/bash
id=$1
if [[ $id =~ .*TXT.* ]]; then
    sed -i "s/TEXT abc.*/TEXT $id/" someDataFile
fi
    
por terreys 31.08.2016 / 08:47

2 respostas

1

Funcionou bem com os seguintes comandos:

$ cat > test
asd asd asd asd
asd TEXT abc.123 asd
asd asd asd asd

$ var='ABC-TXT-123'
$ sed -i "s/TEXT abc.*/TEXT $var/" test

$ cat test
asd asd asd asd asd
asd TEXT ABC-TXT-123
asd asd asd asd asd

Talvez você possa nos fornecer também um trecho do arquivo ...

    
por 31.08.2016 / 09:20
0

No OSX, tive que incluir um '' extra para que funcionasse:

#!/bin/bash
id=$1
if [[ $id =~ .*TXT.* ]]; then
    sed -i '' 's/TEXT abc.*/TEXT '$id'/' someDataFile
fi

que significa que o conteúdo de someDataFile vai de 'TEXT abc.123' para 'TEXT ABC-TXT-123'. Mas sua descrição pede um pouco diferente, então você pode querer:

    sed -i '' 's/TEXT abc.*/'$id'/' someDataFile

em vez de substituir toda a linha e não colocar a palavra "TEXT" em ...

    
por 31.08.2016 / 09:25