Почему моя команда sed не вызывает мою переменную c? - PullRequest
0 голосов
/ 12 сентября 2018

Добрый день, вот мой код bash:

for f in {-20..20};
do
     cd V_$f;
     echo V_$f;
     c= echo "$f /10" | bc -l | xargs printf "%.1f";
     echo $c;
     sed -i -e "s/TS.Voltage 0.0 eV/TS.Voltage "$c" eV/" scattering.fdf;
     cd ..;
done;

Когда вызывается под именем V.sh, результат, например,

V_-20
-2.0
...

и т. Д. До V_20 / 2.0, представляющих мою папку, и значение c, необходимое в каждом файле. У меня вопрос, когда я смотрю на свой файл fdf в каждой из моих папок, чтобы увидеть, работает ли команда sed, значение c не отображается. На самом деле я получаю TS.Voltage "space" eV вместо значения c. Любой совет, пожалуйста?

1 Ответ

0 голосов
/ 12 сентября 2018

Линия

c= echo "$f /10" | bc -l | xargs printf "%.1f";

Читается как «Установить c для временного опустошения, а затем запустить конвейер echo / bc / xargs».Чтобы сохранить результат программы или программ в переменной, используйте $(...):

c=$(echo "$f /10" | bc -l | xargs printf "%.1f")

Далее, вы можете исправить выражение sed:

  • .Весь смысл двойных кавычек заключается в том, что переменные окружения do расширяются в них.
  • Точка соответствует любому отдельному символу.Вы должны экранировать его, чтобы он соответствовал буквальному периоду.

Команда должна выглядеть следующим образом:

"s/TS\.Voltage 0\.0 eV/TS.Voltage $c eV/"

Вам действительно не нужна точка с запятой в конце каждой строки, хотя я полагаю, это не повредит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...