замените строку в файле на другую, где оба сохраняются в переменных

Я хочу заменить строку, найденную в файле другой строкой, но оба имеют специальный символ (в этом примере это символ .), например 1.0 и 2.0

так что эта команда используется в настоящее время:

sed -i 's/1\.0/2\.0/g' /home/user1/file1.txt

что, если 1.0 и 2.0 были сохранены в переменных $i и $j? где i имеет значение 1.0, а j имеет значение 2.0, как я могу заменить i на j?

EDIT:

] Как предположил muru, я использовал двойные кавычки, как было предложено, и работает нормально, только если $ i и $ j были сохранены как 1.0 и 2.0, я не работаю правильно, если $ i и $ j, где они были сохранены как 1.0 и 2.0, могут кому-то понравиться советуем, как это исправить?

EDIT2:

Как предложил muru, я следил за найденным здесь ответом, но результат не правильный.

Это мой shell file:

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

Это мой файл text1.txt:

0 0 -1 0
1 0 0 0
0 -1 0 0
1.5 0.0 1.0 1

, и это результат:

0 0 -4.0
4.0 0 0
0 -4.0 0
1.5 0.0 2.5 1

и правильный результат должен быть:

0 0 -1 0
1 0 0 0
0 -1 0 0
1.5 0.0 4.0 1
1
задан 23 May 2017 в 15:39

1 ответ

Извините, я немного не понял ... это:

https://stackoverflow.com/questions/407523/escape-a-string-for-a-sed-replace-pattern

охватывает только заменяющую строку.

Для точного соответствия в строке поиска, я не думаю, что sed - это ваш инструмент, вы хотите получить ответ, который @muru опубликовал также: [!d5 ] https://stackoverflow.com/questions/407523/escape-a-string-for-a-sed-replace-pattern

Удача

]
0
ответ дан 23 May 2018 в 22:29

Другие вопросы по тегам:

Похожие вопросы: