perl -pi -e "s/.*/DELETE FROM my_object_times where ID = '$1';/g" ids.csv
Поскольку фрагмент Perl заключен в двойные кавычки, оболочка расширит $ 1
до любого его текущего значения (возможно, пустого или не установленного в вашем случае). Чтобы этого не произошло, нужно избегать знака доллара. Кроме того, у вас нет группы захвата в шаблоне оператора s ///
, поэтому $ 1
ничего не будет содержать. ( perl -w
или используйте предупреждения
, чтобы предупредить вас об этом.)
Либо добавьте скобки к шаблону, либо используйте $ &
.
Кроме того, глобальная замена, похоже, не работает с шаблоном, который может иметь нулевую ширину, поэтому я предлагаю удалить флаг g
.
Итак:
perl -w -pe "s/.*/DELETE FROM my_object_times where ID = '\$&';/"
(Хотя &
не является допустимой переменной в оболочке, поэтому $ &
останется как есть. Но в целом $
нужно будет экранировать.)
Обычно лучше помещать код Perl в одинарные кавычки, поскольку знак доллара довольно часто встречается в Perl. Но здесь одинарные кавычки внутри кода Perl немного усложняют задачу. Один из вариантов - представить их в шестнадцатеричном формате:
perl -w -pe 's/.*/DELETE FROM my_object_times where ID = \x27$&\x27;/'