Попытка изменить значения в текстовом файле с помощью sed в bash script с помощью строки,
sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp
Это будет в цикле for. Не уверен, почему он не работает. Любые предложения?
Ответ 1
Переменные внутри ' не заменяются в bash. Чтобы получить подстановку строк (или интерполяцию, если вы знакомы с perl), вам нужно будет изменить ее, чтобы использовать двойные кавычки " вместо одиночных кавычек:
sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp
Кроме того, если вам это не нужно в другом файле, вы можете использовать флаг -i, чтобы изменить файл на месте.
Ответ 2
переменные в одинарных кавычках не расширяются, в двойных кавычках они используют двойные кавычки в этом случае.
sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp
Вы также можете заставить его работать с eval, но не делайте этого!!
Ответ 3
sed "s/draw($prev_number;n_)/draw($number;n_)/g"
будет ли это работать?
Ответ 4
Вы можете использовать переменные, как показано ниже. Как здесь, я хотел заменить hostname т.е. системную переменную в файле. Я ищу строку look.me и заменяю эту целую строку на look.me=<system_name>
sed -i "s/.*look.me.*/look.me=`hostname`/"
Вы также можете сохранить системное значение в другой переменной и использовать эту переменную для замены.
host_var= `hostname`
sed -i "s/.*look.me.*/look.me=$host_var/"
Входной файл:
look.me=demonic
Вывод файла (если мое системное имя prod-cfm-frontend-1-usa-central-1):