Eu quero substituir uma string encontrada em um arquivo por outra, mas ambos têm um caractere especial (neste exemplo, é um .
char), por exemplo, 1.0
e 2.0
então este é o comando atualmente usado:
sed -i 's/1\.0/2\.0/g' /home/user1/file1.txt
e se 1.0
e 2.0
foram salvos nas variáveis $i
e $j
? onde i
tem o valor 1.0
e j
tem o valor 2.0
, como ainda posso substituir i
por j
?
EDITAR:
Como sugerido pelo muru, usei as aspas duplas conforme sugerido e funciona bem apenas se $ i e $ j foram salvos como 1.0 e 2.0 eu não funciono corretamente se $ i e $ j forem salvos como 1.0 e 2.0 Alguém por favor, informe como corrigir isso?
EDIT2:
Como sugerido por Muru, segui a resposta encontrada aqui , mas o resultado ainda não está correto.
Este é o meu arquivo de shell:
declare -a arr1=("1.0" "2.0" "3.0" "4.0")
ii=1.0
for i in "${arr1[@]}"
do
str2=$i
echo -e "\e[41m## str2 = $str2 ##\e[0m"
echo -e "\e[41m## $ii $str2 ##\e[0m"
printf '%s\n' "$ii" "$str2" |
file=/home/user1/text1.txt
tmpfile="${TMPDIR:-/tmp}/$( basename "$file" ).$$"
while read line
do
echo ${line/$ii/$str2}
done < "$file" > "$tmpfile" && mv "$tmpfile" "$file"
ii=$str2
done
este é o meu arquivo text1.txt
:
0 0 -1 0
1 0 0 0
0 -1 0 0
1.5 0.0 1.0 1
e este é o resultado:
0 0 -4.0
4.0 0 0
0 -4.0 0
1.5 0.0 2.5 1
e o resultado correto deve ser:
0 0 -1 0
1 0 0 0
0 -1 0 0
1.5 0.0 4.0 1