2015-06-03 6 views
-2

Как изменить имена файлов с таких обозначений: SomeCodeFile.extension на C/C++ обозначение: some_code_file.extension. Я бы хотел использовать Perl + Find + Regex для печати этих имен.Изменение имен файлов Perl

+2

Вы пробовали что-нибудь от себя? – serenesat

ответ

2

Вы можете использовать регулярное выражение:

perl -e 'for $f (@ARGV) { 
      ($n = $f) =~ s/(?<=.)([[:upper:]])/_\l$1/g; 
      rename $f, lcfirst $n; 
     }' SomeCodeFiles* 
  • [[:upper:]] матчи прописными буквами.
  • (?<=.) это вид сзади утверждение, то есть буква предшествует что-то (мы не хотим _some_code_file.ext)
  • \l изменяет следующую букву в нижнем регистре (аналогично lcfirst)

Обратите внимание, что в результате может быть неприятным в некоторых ситуациях (x_m_l2_j_s_o_n.c, u_r_l__validator.cpp).

+0

Не могли бы вы сопоставить верхний регистр с нижним регистром, чтобы избежать проблем, например. XML. Я думаю, что изменение «взгляда» на «нижний регистр» будет иметь дело с этим? – Sobrique

+0

@Sobrique: Это зависит от того, что вы ожидаете. Однако просто изменить '.' на' [[: lower:]] ', похоже, не так. Может быть, меняет 'lcfirst' на' lc' в то же время ... – choroba

+0

Ну, это делает: 'camelCaseFile -> camel_case_file и XML2JSON_parser -> XML2JSON_parser' - но вам все равно придется беспокоиться о' lcfirst'ing, что второй дело. – Sobrique

Смежные вопросы