Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Languages
 С
 GNU С Library 
 Qt 
 STL 
 Threads 
 C++ 
 Samples 
 stanford.edu 
 ANSI C
 Libs
 LD
 Socket
 Pusher
 Pipes
 Encryption
 Plugin
 Inter-Process
 Errors
 Deep C Secrets
 C + UNIX
 Linked Lists / Trees
 Asm
 Perl
 Python
 Shell
 Erlang
 Go
 Rust
NEWS
Последние статьи :
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
  SQL 30.07   
  JFS 10.06   
  B-trees 01.06   
 
TOP 20
 Go Web ...603 
 2.0-> Linux IP Networking...353 
 Secure Programming for Li...294 
 2.6-> Kernel 2.6.17...226 
 William Gropp...222 
 Kamran Husain...221 
 Robbins 4...218 
 Advanced Bash Scripting G...211 
 Rodriguez 9...197 
 Rodriguez 6...195 
 Ethreal 1...193 
 UML 3...192 
 Стивенс 8...189 
 Daniel Bovet 2...188 
 Steve Pate 1...187 
 Steve Pate 3...186 
 Kamran Husain...184 
 Advanced Bash Scripting G...182 
 Rodriguez 8...179 
 Kernel Notes...176 
 
  01.03.2019 : 2682145 посещений 

iakovlev.org

Comand Line Perl

Использование опции perl -e позволяет вам установить права скрипта при его выполнении в командной строке. Перловые опции для командной строки позволяют использовать его в качестве таких утилит , как sed, awk, vi.

Опция -p делает Perl потоковым редактором , похожим на sed и awk.

При редактировании больших файлов часто бывает выгоднее выполнить команду perl -pe, чем вызывать для них какой-то редактор. Редактирование гигабайтных файлов обычным редактором - нонсенс , в то время как команда perl -p может оказаться для вас сюрпризом.

Опция p выполняет в таких случаях следующее : берет строку со стандартного входа (STDIN), присваивает ей имя переменной $_ и выполняет скрипт над ней. $_ - это специальная переменная , которая при каждой итерации инициализируется по-новой. По завершению работы скрипт выводит значение $_ на стандартный вывод (STDOUT). Опция -n работает аналогично опции -p , за исключением того , что не выводит на стандартный вывод.

Например , если у вас есть 2 текстовых файла - 123 и 456 , то команда
perl -pe '' 123 456
выведет их друг за другом на экран, т.е. сделает то же самое , что и команда
cat 123 456.

Если в файле 123 нужно заменить кусок , можно выполнить команду
perl -pe 's/искомый текст/заменяемый текст/g' < 123 > 12345

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

Порядок использования двойных и одинарных кавычек таков : вместо одинарных кавычек можно использовать формат
q/Hello world/
вместо двойных
qq/Hello world/

Сравните результат выполнения 2-х команд :
perl -e "$a = qq/Hello World/; print $a" # ошибка
perl -e '$a = qq/Hello World/; print $a' # напечатает "Hello World"

В случае с perl -pe для потоковых операций типа perl -pe 's/here is a typi/here is a typo/g' < inputfile > outputfile, Perl позволяет редактировать файл и делать откат.

Опция -i такой откат делать не позволит - в этом случае лучше иметь где-то копию оригинального файла. Можно использовать вместо нее опцию -i.bak для файла , который например называется foo, при этом старая сохранится как foo.bak

Например :
perl -p -i.old -e 's/oldstring/newstring/g' file

Или так
perl -p -i.old -e 's/oldstring/newstring/g' file*

Рекурсивная замена всех строк :
find . | xargs perl -p -i.old -e 's/oldstring/newstring/g'

Опция -a и -F позволяет разбивать строки на слова и копировать их в массив @F .

В следующем примере будут печататься первые 4 слова из каждой строки , при этом будут игнорироваться комментарии - строки , начинающиеся с диеза :
perl -naF 'next if /^#/; print "$F[3]\n"'

Следующий пример извлекает всех пользователей из /etc/passwd.
perl -na -F: -e 'print "$F[0]\n"' < /etc/passwd

Пусть у вас есть несколько HTTP log-файлов , которые называются по шаблону типа access_log.2005-1-1 ...... access_log.2005-12-31 и вам нужно скопировать их в access_log.old.2005-1-1 ..... access_log.old.2005-12-31:
perl -e 'for(<access_log.*>){$a = $_; s/log/log.old/; `cp $a $_`}'

В этом скрипте конструкция <access_log.*> используется для создания цикла. В каждом цикле присваивается переменная $_. В переменной $a сначала сохраняется старый файл , затем он копируется в новую переменную $_ .

В следующем примере копируется на машины B,C,D скрипт command.pl и выполняется там :
perl -e 'for("B","C","D"){`scp command.pl $_:`; `ssh $_ command.pl`; }'

Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье