что означает знак доллара в строке подстановки команды bash переименовать

Я читал о переименовании и наткнулся на этот пример, чтобы изменить расширение файла с htm на html:

rename -v 's/\.htm$/\.html/' *.htm

и он сказал: $ означает конец строки. \.htm$ означает, что он будет соответствовать .htm, но не .html.

Меня немного смутило использование здесь $. Поскольку мы уже указали *.htm в конце командной строки, rename будет выбирать только файлы htm (вместо html). Так зачем было все еще использовать $? Другими словами, что плохого в том, чтобы не использовать $?


person Geng    schedule 27.03.2015    source источник
comment
Мне пришлось бы проверить это, чтобы подтвердить, но, предположительно, без привязки $, которая обнаружит первое вхождение .htm в имени файла, а не в его расширении (т.е., например, foo.htm.htm станет foo.html.htm вместо foo.htm.html ).   -  person Etan Reisner    schedule 28.03.2015
comment
Потому что это регулярное выражение. Поищи это; рассчитывайте потратить все выходные, если хотите сразу выучить его как следует.   -  person tripleee    schedule 28.03.2015
comment
Исходная команда rename в системах Unix не позволяла использовать регулярные выражения, но многие дистрибутивы за последние несколько лет заменили ее сценарием Perl Ларри Уолла rename. Если вам повезет, в вашей системе может быть исходная команда rename, доступная как rename.ul. Тогда вам не придется иметь дело с регулярными выражениями.   -  person dg99    schedule 28.03.2015


Ответы (1)


Якорь $ соответствует концу имени исходного файла, и он по-прежнему требуется в вашем регулярном выражении, и точка также должна быть экранирована, иначе abc.htm.htm будет переименован в abc.html.htm вместо abc.htm.html.

Правильная команда:

rename -v 's/\.htm$/.html/' *.htm
person anubhava    schedule 27.03.2015
comment
Теперь это может выглядеть так же, но изначально вопрос был rename -v 's/.htm$/.html/' *.htm. В любом случае, я хотел сказать, почему $ все еще понадобится, даже если шаблон имени файла равен *.htm - person anubhava; 28.03.2015