This article compares how simple tasks are done using UNIX tools and Perl one-liners.
sed[]
| task
|
sed
|
perl
|
| Replace 12 with twelve
|
sed 's/12/twelve/g'
|
perl -pe 's/12/twelve/g'
|
| Replace the word sh with Bourne Shell
|
sed -e 's/ sh / Bourne Shell /g'[1]
|
perl -pe 's/\bsh\b/Bourne Shell/g'[2]
|
| Remove lines 2 to 4 from stream
|
sed '2,4d'
|
perl -nle 'print if $.<2 || $.>4'
|
awk[]
| task |
awk |
perl
|
| Print second field (whitespace-separated) |
awk '{print $2}' |
perl -lane 'print $F[1]'
|
| Count lines starting with X |
awk '/^X/ {++x} END {print x}' |
perl -nle '++$x if /^X/; print $x if eof'
|
| Add numbers in second column and print sum |
awk '{sum+=$2} END {print sum}' |
perl -lane '$sum+=$F[1]; print $sum if eof'
|
tr[]
| task |
tr |
perl
|
| ROT13 |
tr 'A-Za-z' 'N-ZA-Mn-za-m' |
perl -pe 'y/A-Za-z/N-ZA-Mn-za-m/'
|
| Remove carriage return from DOS files [3] |
tr -d '\r' |
perl -pe 'tr/\r//d'
|
grep[]
| task |
grep |
perl
|
| Print only lines containing 12 |
grep '12' |
perl -nle 'print if /12/'
|
| Print only lines not containing 12 |
grep -v '12' |
perl -nle 'print if !/12/'
|
nl[]
| task |
nl |
perl
|
| Insert line numbers (lined up) |
nl -ba |
perl -nle 'printf "%6s %s\n", $., $_'
|
[]
- ↑ Won't match words at start/end of line
- ↑ Will match any perl word-boundary which consists of A-Za-z_ followed by a non A-Za-z_
- ↑ This method will remove all carriage return characters, not only those at end of line