определение переименовывает объем команды; слово замены; замените все имя файла; подстановочные знаки

Я использовал

awk -v BINMODE=rw '!($0 in a){a[$0];print}' infile >> outfile

BINMODE = RW: Чтобы сохранить конец линейных терминаторах счастливыми. (Я живу в среде смешанной ОС)

Логика проста.

Если текущая строка не находится в ассоциативном массиве, то добавьте его в ассоциативный массив и печать на вывод.

Может быть ограничения памяти с этим подходом. Для очень больших файлов и наборов файлов я использовал вариации на это, используя хранилище файлов, чтобы пройти мимо ограничений.

0
25.11.2014, 23:15
1 ответ

Вы неправильно используете регулярные выражения. TES * означает TE с любым числом S , поэтому Test-файл-1 будет переименован в Файл 1T-файл-1 :

$ rename -n 's/tes*/file 1/' *
test-file-1 renamed as file 1t-file-1

Аналогично, ^ * будет соответствовать пустой строке, появляющейся в начале, поэтому, как это похоже на ^ , но с Инифинитная петля:

$ rename -n 's/^*/file 1/' *  
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 1) line 1.
example2 renamed as file 1example2
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 2) line 1.
test-file-1 renamed as file 1test-file-1
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 3) line 1.
third renamed as file 1third

Вы должны, вместо этого использовать . * - . Соответствует всем персонажам, кроме новой строки, обычно:

$ rename -n 's/tes.*/file 1/' *
test-file-1 renamed as file 1

$ rename -n 's/.*/file 1/' *      
example2 renamed as file 1
test-file-1 renamed as file 1
third renamed as file 1

, естественно, я ожидаю, что эта последняя команда создавать проблемы.

0
28.01.2020, 04:58

Теги

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