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

Я хочу заменить строку, найденную в файле с другой строкой, но у обоих есть специальный символ (в этом примере, это - a . символ), например, 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?

Править:

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

EDIT2:

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

Это - мой файл оболочки:

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
0
задан 23 May 2017 в 05:39

2 ответа

Используйте жемчуг вместо этого. Это имеет интересное quotemeta функция в регулярных выражениях, где это обработает специальные символы как ., *, и т.д. как простые символы

$ i=1.0  j=4.0
$ perl -pe "s/\Q$i/$j/g" text1.txt 
0 0 -1 0
1 0 0 0
0 -1 0 0
1.5 0.0 4.0 1

, Это документируется здесь: http://perldoc.perl.org/functions/quotemeta.html

2
ответ дан 5 October 2019 в 02:36

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

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

Для точного соответствия в строке поиска, я не думаю, что sed является Вашим инструментом, Вы хотите ответ, который @muru отправил также:

0
ответ дан 5 October 2019 в 02:36

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

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