Ubuntu, lua, nmap и sqlite3 - module 'luasql.sqlite3' not found

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;/' 
1
13.03.2016, 15:43
0 ответов

Теги

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