====== Perl Oneliners ====== Generate a random character password perl -le 'print map { ("a".."z")[rand 26] } 1..8' Create a string of specific length perl -le 'print "a"x50' Create a repeated list of elements perl -le '@list = (1,2)x20; print "@list"' Create a string from an array perl -le "@stuff = ("hello", 0..9, "world"); print join '-', @stuff" Find the numeric values for characters in the string perl -le 'print join ", ", map { ord } split //, "hello world"' Convert a list of numeric ASCII values into a string perl -le '@ascii = (99, 111, 100, 105, 110, 103); print pack("C*", @ascii)' perl -le '@ascii = (99, 111, 100, 105, 110, 103); print map { chr } @ascii' Generate an array with odd numbers from 1 to 100 perl -le '@odd = grep {$_ % 2 == 1} 1..100; print "@odd"' Generate an array with even numbers from 1 to 100 perl -le '@even = grep {$_ % 2 == 0} 1..100; print "@even"' Find the length of the string perl -le 'print length "one-liners are great"' Find the number of elements in an array perl -le '@array = ("a".."z"); print scalar @array' perl -le '@array = ("a".."z"); print $#array + 1' Perl one-liner to get the current week number perl -e 'use Date::Calc qw(Today Week_Number); $weekn = Week_Number(Today); print "$weekn\n"' Pick a random line from a file perl -e 'rand($.) < 1 && ($line = $_) while <>;' Print a list of standard error codes and descriptions. perl -le 'print $!+0, "\t", $!++ for 0..127' Rearrange words from a file perl -lane 'print "$F[0]:$F[1]:$F[2]"' myfile Recursive Search and Replace perl -pi -e's/WHAT TO FIND/WHAT TO REPLACE IT WITH/g' $(grep -Rl WHAT TO FIND /DIR/*) Remove duplicate rows of an un-sorted file based on a single column perl -ane 'print unless $x{$F[0]}++' infile > outfile Replace all environment variable references in files with environemnt variable values perl -p -e 's/\$(\w+)/$ENV{$1}/g;' FILES... Show full path followed by a command perl -le 'chomp($w=$(which $ARGV[0]));$_=$(file $w);while(/link\b/){chomp($_=(split/''/,$_)[1]);chop$_;$w.=" -> $_";$_=''file $_`;}print "\n$w";' COMMAND_NAME Show which include directories your installation of Perl is using. perl -le 'print join $/, @INC' Sum column 1 perl -alne 'END{print $a} $a+=$F[0]' $rmin; END { print $rmin }' Find the maximum element on a line perl -MList::Util=max -alne 'print max @F' Find the maximum element over all the lines perl -MList::Util=max -alne '@M = (@M, @F); END { print max @M }' Replace each field with its absolute value perl -alne 'print "@{[map { abs } @F]}"' Find the total number of fields (words) on each line perl -alne 'print scalar @F' Print the total number of fields (words) on each line followed by the line perl -alne 'print scalar @F, " $_"' Find the total number of fields (words) on all lines perl -alne '$t += @F; END { print $t}' Print the total number of fields that match a pattern perl -alne 'map { /regex/ && $t++ } @F; END { print $t }' perl -alne '$t += /regex/ for @F; END { print $t }' perl -alne '$t += grep /regex/, @F; END { print $t }' Print the total number of lines that match a pattern perl -lne '/regex/ && $t++; END { print $t }' Generate 10 random numbers between 5 and 15 (excluding 15) perl -le '$n=10; $min=5; $max=15; $, = " "; print map { int(rand($max-$min))+$min } 1..$n' Convert an IP address to unsigned integer perl -le '$i=3; $u += ($_<<8*$i--) for "127.0.0.1" =~ /(\d+)/g; print $u' perl -le '$ip="127.0.0.1"; $ip =~ s/(\d+)\.?/sprintf("%02x", $1)/ge; print hex($ip)' perl -le 'print unpack("N", 127.0.0.1)' perl -MSocket -le 'print unpack("N", inet_aton("127.0.0.1"))' Convert an unsigned integer to an IP address perl -MSocket -le 'print inet_ntoa(pack("N", 2130706433))' perl -le '$ip = 2130706433; print join ".", map { (($ip>>8*($_))&0xFF) } reverse 0..3' perl -le '$ip = 2130706433; $, = "."; print map { (($ip>>8*($_))&0xFF) } reverse 0..3' Convert a decimal number to hex using @hex lookup table perl -le '$num = 255; @hex = (0..9, "a".."f"); while ($num) { $s = $hex[($num%16)&15].$s; $num = int $num/16 } print $s' perl -le '$hex = sprintf("%x", 255); print $hex' perl -le '$num = "ff"; print hex $num' N-space a file perl -pe '$_.="\n"x7' Remove all blank lines perl -ne 'print unless /^$/' perl -lne 'print if length' perl -ne 'print if /\S/' Remove all consecutive blank lines, leaving just one perl -00 -pe '' perl -00pe0 Number only non-empty lines in a file perl -pe '$_ = ++$a." $_" if /./' Number and print only non-empty lines in a file (drop empty lines) perl -ne 'print ++$a." $_" if /./' Print the number of lines in a file that match a pattern (emulate grep *c) perl -lne '$a++ if /regex/; END {print $a+0}' perl -nE '$a++ if /regex/; END {say $a+0}' Reverse a file perl -e'@f=<>;print reverse@f' file ROT 13 a file perl -lpe 'y/A-Za-z/N-ZA-Mn-za-m/' file Base64 encode a string perl -MMIME::Base64 -e 'print encode_base64("string")' perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' file Base64 decode a string perl -MMIME::Base64 -le 'print decode_base64("base64string")' perl -MMIME::Base64 -ne 'print decode_base64($_)' file URL-escape a string perl -MURI::Escape -le 'print uri_escape($string)' URL-unescape a string perl -MURI::Escape -le 'print uri_unescape($string)' HTML-encode a string perl -MHTML::Entities -le 'print encode_entities($string)' HTML-decode a string perl -MHTML::Entities -le 'print decode_entities($string)' Convert all text to uppercase perl -nle 'print uc' perl -ple '$_=uc' perl -nle 'print "\U$_"' Convert all text to lowercase perl -nle 'print lc' perl -ple '$_=lc' perl -nle 'print "\L$_"' Uppercase only the first word of each line perl -nle 'print ucfirst lc' perl -nle 'print "\u\L$_"' Invert the letter case perl -ple 'y/A-Za-z/a-zA-Z/' Camel case each line perl -ple 's/(\w+)/\u$1/g' perl -ple "s/(?= 17 && $. <= 30' perl -ne 'print if int($.) ~~ (17..30)' perl -ne 'print if grep { $_ == $. } 17..30' print all lines that contain only characters perl -ne 'print if /^[[:alpha:]]+$/' print all unique lines perl -ne 'print unless $a{$_}++' print the first field (word) of every line (emulate cut -f 1 -d ’ ’) perl -alne 'print $f[0]'