2

Я хотел переименовать имя файла, указав более подробную информацию, чтобы я мог получить ответ на свой вопрос:

У меня есть следующие строки в crontab

00 * * * * /home/@@@@/ulimit_nofile_status_20480.sh >> /export/####/$$$$$/ulimit_nofile_status.txt

00 * * * * /home/@@@@/ulimit_nproc_status_20480.sh >> /export/####/%%%%/ulimit_nproc_status.txt

Я хочу изменить имена файлов ulimit_nofile_status_20480.sh и ulimit_nproc_status_20480.sh на ulimit_nofile_status_40960.sh и ulimit_nproc_status_40960.sh соответственно.

Другими словами, я хочу переименовать 20480 в 40960

Я пробовал команды ниже, но они не работали для меня.

crontab -l | sed 's#/_20480\.#/40960.#' | crontab -
crontab -l | sed 's/\<_20480\>/40960/' | crontab -
"sed -i s//40960/" crontab -e

1 ответ1

1

Ваши регулярные выражения сумасшедшие. Следующее должно работать.

crontab -l | sed 's#_20480\.#_40960.#' | crontab -

Ваша попытка требовала, чтобы перед подчеркиванием была косая черта, но, конечно, в вашем файле crontab такого нет, поэтому регулярное выражение ничего не соответствует.

Вы говорите, что хотите заменить 20480 на 40960 но некоторые ваши попытки выглядят так, как будто вы также хотите удалить подчеркивание перед номером. Если это правильно, очевидно, удалите его из строки замены.

Я полагаю, ваш sed не распознает \< что в противном случае было бы хорошей попыткой.

Последняя из ваших попыток настолько далека от любого допустимого синтаксиса, что я не думаю, что могу прокомментировать это осмысленно. Он анализируется как попытка использовать строку sed -i s//40960/ в качестве имени команды с аргументами crontab и -l переданными ей в качестве параметров.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .