Использование переменной с командой переименования

Это может быть сделано с помощью awk , но это неудобно. :) Гораздо лучше сделать это с помощью настоящего парсера CSV, например csvkit :

csvgrep -c Comment -m 'too much, later' file.csv

1
25.03.2017, 21:39
2 ответа

С помощью util-linux переименовать :

$ touch myfile1
$ ll
total 0
-rw-rw-r--. 1 fpm fpm 0 Mar 25 15:30 myfile1
$ read DELCHARS
my
$ rename -- "$DELCHARS" "" myfile1
$ ll
total 0
-rw-rw-r--. 1 fpm fpm 0 Mar 25 15:30 file1
$ 
1
27.01.2020, 23:24

Предположим - как предлагает ваша собственная командная строка - perl реализация переименовать (пример сценария, поставляемый с perl , начиная с версии 3 в 1989 г. и часто включается в качестве команды во многие ОС, иногда в виде перезаписи с расширениями, отдельными от пакета perl , например этот ), иногда называемым prename в некоторых дистрибутивах Linux, где переименовать в противном случае это имя из util-linux , вы можете использовать среду:

STRING=$characters_to_remove_inputted_by_the_user rename 's/\Q$ENV{STRING}\E//g' ./*

Выше, содержимое $ characters_to_remove_inputted_by_the_user переменная оболочки передается как значение переменной среды STRING , которую perl извлекает с помощью $ ENV {STRING} .

В качестве альтернативы вы можете использовать специальную встроенную оболочку export , чтобы эта переменная оболочки передавалась в окружение каждой выполняемой команды, включая переименование :

export characters_to_remove_inputted_by_the_user
rename 's/\Q$ENV{characters_to_remove_inputted_by_the_user}\E//g' ./*

] \ Q / \ E должны убедиться, что $ STRING обрабатывается как фиксированная строка, а не как регулярное выражение. Если вы хотите, чтобы его обрабатывали как регулярное выражение, просто:

REGEXP=$characters_to_remove_inputted_by_the_user rename 's/$ENV{REGEXP}//g' ./*

Избегайте таких вещей, как:

 переименовать «s / $ characters_to_remove_inputted_by_the_user // g»./ * 
 

Выше содержимое переменной оболочки расширяется оболочкой перед вызовом переименовать , так что это может быть уязвимостью внедрения команды, так как значение переменной будет интерпретируется как код perl (подумайте, например, о таком значении, как //; system ("reboot"); s / ).

3
27.01.2020, 23:24

Теги

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