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