#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 $_;
}