Скрипт Perl для замены имени расширения и пробела - PullRequest
0 голосов
/ 15 марта 2011

Я новичок в Perl.

В настоящее время моя задача состоит в том, чтобы просмотреть все файлы .htm в папке и сделать две вещи:

  1. Заменить все ".htm "extension to" .xml "
  2. Заменить все пробелы в имени файла на подчеркивание.

В моем скрипте perl я вставил следующие две строки:

@pub=`ls $sourceDir | grep '\.htm' | grep -v Default |  head  -550`;
foreach (@pub) {

my $docName = $_;
chomp($docName);

    $docName =~ s/.htm$//g;
    $docName =~ s/ /_/g;
             ....}

$ docName - это переменная, которая содержит текущее полное имя файла (включая расширение).Интересно, что эти два оператора замены $ docName в любое время работали только над одним из них.Например, приведенный здесь пример кода заменит только расширение, но пропустит пробел, но если я закомментирую первое, то пробел идеально превратится в подчеркивание, но расширения останутся ".htm".

Можетэксперты мне помогают?И могли бы также подсказать, где я ошибся?Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Вы уверены, что это все

$docName =~ s/.htm$//g;

делает?

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

$docName =~ s/\.htm$/\.xml/;

Кроме этого, с тобой все будет в порядке.

0 голосов
/ 15 марта 2011

Попробуйте:

my @pub = grep { ! /Default/ } glob( '*.htm' );

for my $pub ( @pub ){
  $pub =~ s{ \. htm \z }{}msx;
  $pub =~ s{ \s+ }{_}gmsx;
  print "$pub\n";
}

См .:

perldoc -f glob
perldoc -f grep
perldoc perlretut
perldoc perlre
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...