Как написать Perl-скрипт для преобразования файла во все заглавные буквы?

#perl #file #uppercase

#perl #файл #верхний регистр

Вопрос:

Как я могу написать Perl-скрипт для преобразования текстового файла во все заглавные буквы?

Ответ №1:

 perl -ne "print uc" < input.txt
  

-n Завершает ваш скрипт командной строки (который предоставляется -e ) в while цикле. A uc возвращает ПОЛНОСТЬЮ ЗАГЛАВНУЮ версию переменной по умолчанию $_ , и что print делает, ну, вы сами это знаете. 😉

-p Это то же самое, что -n , но print в дополнение. Опять же, воздействуя на переменную по умолчанию $_ .

Чтобы сохранить это в файле сценария:

 #!perl -n
print uc;
  

Назовите это так:

 perl uc.pl < in.txt > out.txt
  

Комментарии:

1. добавьте -C для файлов utf-8, например, echo aßbc | perl -C -ne'print uc' -> ASSBC .

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

3. Просто еще один последующий вопрос… Как я могу написать это и сохранить в файле Perl? Чтобы я просто предоставил ему аргументы входного файла и выходного файла?

4. #!perl -n выводит uc; В две строки! Затем назовите это так: perl uc.pl < in.txt > out.txt

5. Я пробовал это, но это ничего не дало. Как мне добавить информацию о вводе / выводе в командную строку при запуске этого скрипта на Perl? Кроме того, этот скрипт не выглядит достаточно длинным

Ответ №2:

 $ perl -pe '$_= uc($_)' input.txt > output.txt
  

Комментарии:

1. Спасибо Мэтью. Я пробовал это, но я немного изменил его с информацией о каталоге. Однако это выдает мне ошибку: «Не удается найти завершитель строки»‘» где-либо перед EOF в строке 1″

Ответ №3:

perl -pe ‘$_ = uc($_)’ input.txt > output.txt

Но тогда вам даже не нужен Perl, если вы используете Linux (или * nix). Некоторые другие способы:

awk:

awk ‘{ настройка печати ($ 0) }’ input.txt >output.txt

tr:

tr ‘[:нижний:]’ ‘[:верхний:]’ < input.txt > output.txt

Комментарии:

1. Спасибо за информацию. Хотя я не использую Linux.

2. Хорошо, np. Несмотря на то, что Perl очень помогает пользователям Linux, я всегда думал, что его помощь гораздо полезнее для пользователей Windows; просто из-за того факта, что Linux настолько богат инструментами, что одна задача может быть выполнена с помощью многих его стандартных утилит.

Ответ №4:

 $ perl -Tpe " $_ = uc; " --

$ perl -MO=Deparse -Tpe " $_ = uc; " -- a s d f
LINE: while (defined($_ = <ARGV>)) {
    $_ = uc $_;
}
continue {
    die "-p destination: $!n" unless print $_;
}
-e syntax OK

$ cat myprogram.pl
#!/usr/bin/perl -T --
LINE: while (defined($_ = <ARGV>)) {
    $_ = uc $_;
}
continue {
    die "-p destination: $!n" unless print $_;
}