Chapter 3 UNIX Utilities for Power Users Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, 2003. Original.

Slides:



Advertisements
Similar presentations
CS 898N – Advanced World Wide Web Technologies Lecture 8: PERL Chin-Chih Chang
Advertisements

CS Lecture 03 Outline Sed and awk from previous lecture Writing simple bash script Assignment 1 discussion 1CS 311 Operating SystemsLecture 03.
Linux+ Guide to Linux Certification, Second Edition
More Shell Basics CS465 - Unix. Unix shells User’s default shell - specified in /etc/passwd file To show which shell you are currently using: $ echo $SHELL.
CS 497C – Introduction to UNIX Lecture 16: - File Attributes Chin-Chih Chang
Guide To UNIX Using Linux Third Edition
Lecture 02CS311 – Operating Systems 1 1 CS311 – Lecture 02 Outline UNIX/Linux features – Redirection – pipes – Terminating a command – Running program.
Xuan Guo Chapter 3: Utilities for Power Users Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, 2003.
Unix Filters Text processing utilities. Filters Filter commands – Unix commands that serve dual purposes: –standalone –used with other commands and pipes.
UNIX Filters.
 2004 Prentice Hall, Inc. All rights reserved. Chapter 25 – Perl and CGI (Common Gateway Interface) Outline 25.1 Introduction 25.2 Perl 25.3 String Processing.
Shell Script Examples.
Review for Exam 1 Exam 1 on June 24 CSC 3320.
Shell Scripting Awk (part1) Awk Programming Language standard unix language that is geared for text processing and creating formatted reports but it.
Advanced File Processing
1 Operating Systems Lecture 3 Shell Scripts. 2 Brief review of unix1.txt n Glob Construct (metacharacters) and other special characters F ?, *, [] F Ex.
Week 7 Working with the BASH Shell. Objectives  Redirect the input and output of a command  Identify and manipulate common shell environment variables.
Agenda User Profile File (.profile) –Keyword Shell Variables Linux (Unix) filters –Purpose –Commands: grep, sort, awk cut, tr, wc, spell.
Chapter Four UNIX File Processing. 2 Lesson A Extracting Information from Files.
Unix Talk #2 (sed). 2 You have learned…  Regular expressions, grep, & egrep  grep & egrep are tools used to search for text in a file  AWK -- powerful.
Introduction to Unix (CA263) File Processing. Guide to UNIX Using Linux, Third Edition 2 Objectives Explain UNIX and Linux file processing Use basic file.
Unix programming Term: III B.Tech II semester Unit-II PPT Slides Text Books: (1)unix the ultimate guide by Sumitabha Das (2)Advanced programming.
CIS 218 Advanced UNIX1 CIS 218 – Advanced UNIX (g)awk.
CS 403: Programming Languages Fall 2004 Department of Computer Science University of Alabama Joel Jones.
1 Lecture 5 Additional useful commands COP 3353 Introduction to UNIX.
Advanced File Processing. 2 Objectives Use the pipe operator to redirect the output of one command to another command Use the grep command to search for.
Introduction to Bash Programming Ellen Zhang. Previous three classes What have we learnt so far ?
Linux+ Guide to Linux Certification, Third Edition
UNIX Shell Script (1) Dr. Tran, Van Hoai Faculty of Computer Science and Engineering HCMC Uni. of Technology
Chapter Five Advanced File Processing Guide To UNIX Using Linux Fourth Edition Chapter 5 Unix (34 slides)1 CTEC 110.
Chapter Five Advanced File Processing. 2 Objectives Use the pipe operator to redirect the output of one command to another command Use the grep command.
Course materials may not be reproduced in whole or in part without the prior written permission of IBM. 5.1 © Copyright IBM Corporation 2008 Unit 10 Linux.
Agenda Regular Expressions (Appendix A in Text) –Definition / Purpose –Commands that Use Regular Expressions –Using Regular Expressions –Using the Replacement.
BIF713 Additional Utilities. Linux Utilities  You have learned many Linux commands. Here are some more that you can use:  Data Manipulation (Reg Exps)
Xuan Guo Chapter 3-2 Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, CSc
I/O Redirection and Regular Expressions February 9 th, 2004 Class Meeting 4.
Introduction to Unix – CS 21 Lecture 12. Lecture Overview A few more bash programming tricks The here document Trapping signals in bash cut and tr sed.
13 More Advanced Awk Mauro Jaskelioff (originally by Gail Hopkins)
Chapter Five Advanced File Processing. 2 Lesson A Selecting, Manipulating, and Formatting Information.
LIN Unix Lecture 7 Hana Filip. LIN Text Processing Command Line Utility Programs (cont.) sed LAST WEEK wc sort tr uniq awk TODAY join paste.
40 Years and Still Rocking the Terminal!
I/O Redirection & Regular Expressions CS 2204 Class meeting 4 *Notes by Doug Bowman and other members of the CS faculty at Virginia Tech. Copyright
숙명여대 창병모 2011 가을 1. 파일 조작  filtering, sorting, comparing, searching for files 명령어 스케줄링  cron, at 텍스트 처리 프로그램  AWK 파일 보관 및 압축  archiving  tar, gzip.
Xuan Guo Chapter 5 The Bourne Shell Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, Notes by Michael.
Chapter 7 UNIX Utilities for Power Users Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, Original.
1 Lecture 9 Shell Programming – Command substitution Regular expressions and grep Use of exit, for loop and expr commands COP 3353 Introduction to UNIX.
Lesson 3-Touring Utilities and System Features. Overview Employing fundamental utilities. Linux terminal sessions. Managing input and output. Using special.
1 제 3 장 유틸리티 숙명여대 창병모 파일 조작 filtering, sorting, comparing, searching for files 명령어 스케줄링 cron, at 텍스트 처리 프로그램 AWK 파일 보관 및 압축 archiving tar,
Sed. Class Issues vSphere Issues – root only until lab 3.
Linux+ Guide to Linux Certification, Second Edition
Chapter 3 UNIX Utilities for Power Users Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, 2003.
ORAFACT Text Processing. ORAFACT Searching Inside Files grep - searches for patterns within files grep [options] [[-e] pattern] filename [...] -n shows.
Chapter 5 The Bourne Shell Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, Notes by Michael Weeks.
CS 403: Programming Languages Lecture 20 Fall 2003 Department of Computer Science University of Alabama Joel Jones.
Chapter 3 UNIX Utilities for Power Users Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, Original.
Linux Administration Working with the BASH Shell.
Filters and Utilities. Notes: This is a simple overview of the filtering capability Some of these commands are very powerful ▫Only showing some of the.
CSE 303 Concepts and Tools for Software Development Richard C. Davis UW CSE – 10/9/2006 Lecture 6 – String Processing.
Lesson 5-Exploring Utilities
Lecture 9 Shell Programming – Command substitution
Unix Scripting Session 4 March 27, 2008.
CS 403: Programming Languages
Guide To UNIX Using Linux Third Edition
Lecture 5 Additional useful commands COP 3353 Introduction to UNIX 1.
Unix Talk #2 (sed).
Chapter Four UNIX File Processing.
Linux Shell Script Programming
Introduction to Bash Programming, part 3
Lecture 5 Additional useful commands COP 3353 Introduction to UNIX 1.
Review.
Presentation transcript:

Chapter 3 UNIX Utilities for Power Users Graham Glass and King Ables, UNIX for Programmers and Users, Third Edition, Pearson Prentice Hall, Original Notes by Raj Sunderraman Converted to presentation and updated by Michael Weeks

Grep(Global or Get Regular Expression and Print) Filtering patterns: egrep, fgrep, grep  grep -hilnvw pattern {fileName}*  displays lines from files that match the pattern  pattern : regular expression -h : do not list file names if many files are specified -i : ignore case -l : displays list of files containing pattern -n : display line numbers -v : displays lines that do not match the pattern -w : matches only whole words only

Grep variations  fgrep : pattern must be fixed string  egrep : pattern can be extended regular expression -x option in fgrep: displays only lines that are exactly equal to string  extended regular expressions: + matches one or more of the single preceding character ? matches zero or one of the single preceding character | either or (ex. a* | b*)‏ () *, +, ? operate on entire subexpression not just on preceding character; ex. (ab | ba)*

Differences gerp Search a Pattern from current directory. egrep (grep -E in linux) is extended grep where additional regular expression metacharacters have been added like +, ?, | and (). fgrep (grep -F in linux) is fixed or fast grep and behaves as grep but does not recognize any regular expression metacharacters as being special.

uniq fed with a text file, output the file with adjacent identical lines collapsed to one uniq -c -number [inputfile [outputfile]] -c: causes each line to be preceded by the number of occurrences that were found -number: number fields of each line are ignored

Sort sorts a file in ascending or descending order based on one or more fields. Individual fields are ordered lexicographically, which means that corresponding characters are compared based on their ASCII value.

Sort sort -tc -r [+POS1 [-POS2]] {sortField -bfMn}* {fileName}*  -tc separator is c instead of blank  -r descending instead of ascending  -b ignore leading blanks  -f ignore case  -M month sort (3 letter month abbreviation)‏  -n numeric sort  +POS1 [-POS2] key positions start [up to end]

Sort Examples $ cat sort.dat John Smith Apr 1956 Tony Jones Mar 1950 John Duncan Jan 1966 Larry Jones Dec 1946 $ sort sort.dat John Duncan Jan 1966 John Smith Apr 1956 Larry Jones Dec 1946 Tony Jones Mar 1950

Sort Examples $ sort M sort.dat John Duncan Jan 1966 Tony Jones Mar 1950 John Smith Apr 1956 Larry Jones Dec 1946 $ sort sort.dat John Smith Apr 1956 Larry Jones Dec 1946 John Duncan Jan 1966 Tony Jones Mar 1950

Comparing Files What if you have two files with the same name, but different sizes? cmp -ls file1 file2 offset1 offset2  compares two files for equality  reports the first byte where there is a mismatch  if one file is a prefix of the other, EOF message is displayed

Comparing Files cmp -ls file1 file2 offset1 offset2 Optional values offset1 and offset2 are the offsets into the files where comparison begins.  -l option displays the line number and byte offset of all mismatched bytes  -s option suppresses all output

Comparing Files diff -i file1 file2  compares two files  outputs a description of their differences  -i flag ignores case

Archiving tar -cfrtuvx tarFileName fileList  creates a “tape archive”-format file from the fileList  Typically, use either -c or -x, but not both! -c for Create -x for Extracts  -t option generates a table of contents  -r option unconditionally appends listed files to tar formatted file

Archiving tar -cfrtuvx tarFileName fileList  -u option appends only files that are more recent than those already archived  -f option enables you to give a tar file name Default name is /dev/rmt0  -v verbose If fileList contains directory, its contents are appended/extracted recursively.

Archive Example $ tar cvf ch6.tar ch6 ch6/ ch6/menu.csh ch6/junk/ ch6/junk/junk.csh ch6/junk.csh ch6/menu2.csh ch6/multi.csh ch6/expr1.csh ch6/expr3.csh ch6/expr4.csh ch6/if.csh ch6/menu3.csh

Archive Example $ ls -l ch6.tar -rw-rw-r-- 1 raj raj Jun 26 20:08 ch6.tar $ tar -tvf ch6.tar drwxr-xr-x raj/raj :57 ch6/ -rwxr-xr-x raj/raj :50 ch6/menu.csh drwxr-xr-x raj/raj :57 ch6/junk/ -rwxr-xr-x raj/raj :57 ch6/junk/junk.csh -rwxr-xr-x raj/raj :56 ch6/junk.csh -rw-r--r-- raj/raj :59 ch6/menu2.csh -rwxr-xr-x raj/raj :26 ch6/multi.csh -rwxr-xr-x raj/raj :18 ch6/expr1.csh -rwxr-xr-x raj/raj :20 ch6/expr3.csh -rwxr-xr-x raj/raj :21 ch6/expr4.csh -rwxr-xr-x raj/raj :22 ch6/if.csh -rw-r--r-- raj/raj :01 ch6/menu3.csh

Archive Example $ rm -fr ch6 $ tar -rvf ch6.tar date.txt date.txt $ tar -tvf ch6.tar drwxr-xr-x raj/raj :57 ch6/ -rwxr-xr-x raj/raj :50 ch6/menu.csh drwxr-xr-x raj/raj :57 ch6/junk/ -rwxr-xr-x raj/raj :57 ch6/junk/junk.csh -rwxr-xr-x raj/raj :56 ch6/junk.csh -rw-r--r-- raj/raj :59 ch6/menu2.csh -rwxr-xr-x raj/raj :26 ch6/multi.csh -rwxr-xr-x raj/raj :18 ch6/expr1.csh -rwxr-xr-x raj/raj :20 ch6/expr3.csh -rwxr-xr-x raj/raj :21 ch6/expr4.csh -rwxr-xr-x raj/raj :22 ch6/if.csh -rw-r--r-- raj/raj :01 ch6/menu3.csh -rw-rw-r-- raj/raj :06 date.txt

Archive Example $ tar -xvf ch6.tar ch6/ ch6/menu.csh ch6/junk/ ch6/junk/junk.csh ch6/junk.csh ch6/menu2.csh ch6/multi.csh ch6/expr1.csh ch6/expr3.csh ch6/expr4.csh ch6/if.csh ch6/menu3.csh date.txt

Find Utility find pathList expression finds files starting at pathList finds files descending from there Allows you to perform certain actions  e.g. deleting the files

Find Utility name pattern  true if the file name matches pattern perm oct  true if the octal description of file's permission equals oct type ch  true if the type of the file is ch (b=block, c=char..)‏ user userId  true if the owner of the file is userId group groupId  true if the group of the file is groupId

Find Utility -atime count  true if the file has been accessed within count days -ctime count  true if the contents of the file have been modified within count days or any of its file attributes have been modified -exec command  true if the exit code = 0 from executing the command. command must be terminated by \; If {} is specified as a command line argument it is replaced by the file name currently matched

Find Utility -print  prints out the name of the current file and returns true -ls  displays the current file's attributes and returns true !expression  negation of expression expr1 [-a] expr2  short circuit and expr1 -o expr2  short circuit or

Find Examples $ find / -name x.c  searches for file x.c in the entire file system $ find. -mtime 14 -ls  lists files modified in the last 14 days $ find. -name '*.bak' -ls -exec rm {} \;  ls and then remove all files that end with.bak

Find Examples $ find ch6 -name j* ch6/junk ch6/junk/junk.csh ch6/junk.csh

Scheduling Command (cron)‏ crontab cronTabName crontab -ler [useName]  Allows you to schedule a series of jobs  Executed on a periodic basis  Uses a file with the following line format: minute hour day month weekday command (0-59) (0-23) (1-31) (1-12) (1-7; 1=Monday) (any command)‏

Scheduling Example $ cat crontab.cron 0 8 * * 1 echo Happy Monday Morning * * * * * echo One Minute passed * 1 mail users % Jan meeting at 3pm minute hour day month weekday command (0-59) (0-23) (1-31) (1-12) (1-7; 1=Monday) (any command)‏

Scheduling Example $ crontab crontab.cron $ crontab -l # DO NOT EDIT THIS FILE - edit the master and reinstall. # (crontab.cron installed on Sat Jun 26 23:33: )‏ # (Cron version -- $Id: crontab.c,v /01/17 03:20:37 vixie Exp $)‏ 0 8 * * 1 echo Happy Monday Morning * * * * * echo One Minute passed * 1 mail users % Jan meeting at 3pm $ crontab -r unregister crontab file

Scheduling Command (at)‏ at command  allows you to schedule one-time commands/scripts at -csm time [date [, year]] [+increment] [-f script]  -c option : use C-shell  -s option : use Bourne shell  -m option : send mail time is specified as HH or HHMM followed by an optional AM/PM

Scheduling Command (at)‏ at -r [jobId]+ at -l [jobId]+  -r option : remove entry from at queue  -l option : list entries in at queue

Scheduling Command (at)‏ at -csm time [date [, year]] [+increment] [script]  time is specified as HH or HHMM followed by an optional AM/PM  date is spelled out using first 3 letters of day and/or month  keyword now can be used in place of time sequence; today and tomorrow can be used in place of date  stated time may be augmented by an increment (number followed by minutes/hours/days/weeks/months/years)‏

Scheduling Example $ cat at.csh #!/bin/csh echo at done > /dev/tty1 $ at now + 2 minutes -f at.csh $ at -l lists the job here You may program the script to reschedule itself as follows: #!/bin/csh date > /dev/tty1 at now + 2 minutes -f at.csh

Pattern Scanning and Processing awk: utility that scans one or more files and performs an action on all lines that match a particular condition The conditions and actions are specified in an awk program. awk reads a line  breaks it into fields separated by tabs/spaces  or other separators specified by -F option

awk Command awk program has one or more commands: [condition] [ \{ action \} ] where condition is one of the following:  special tokens BEGIN or END  an expression involving logical operators, relational operators, and/or regular expressions

awk Command awk [condition] [ \{ action \} ] action is one of the following kinds of C-like statements  if-else; while; for; break; continue  assignment statement: var=expression  print; printf;  next (skip remaining patterns on current line)‏  exit (skips the rest of the current line)‏  list of statements

awk Command accessing individual fields:  $1,..., $n refer to fields 1 thru n  $0 refers to entire line built-in variable NF means number of fields % awk -F: '{ print NF, $1 }' /etc/passwd prints the number of fields and the first field in the /etc/passwd file -F: means to use : as the field separator

awk Command BEGIN condition triggered before first line read END condition triggered after last line read FILENAME: built-in variable for name of file being processed We will use this data in following examples: % cat /etc/passwd nobody:*:-2:-2:Unprivileged User:/:/usr/bin/false root:*:0:0:System Administrator:/var/root:/bin/sh... lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false

awk Example % cat p2.awk BEGIN { print "Start of file: "} { print $1 " " $6 " " $7 } END { print "End of file", FILENAME } % awk -F: -f p2.awk /etc/passwd Start of file: nobody / /usr/bin/false root /var/root /bin/sh... lp /var/spool/cups /usr/bin/false End of file /etc/passwd

awk Operators built-in variable NR contains current line # remember, “-F:” uses colon as separator % cat p3.awk NR > 1 && NR < 4 { print NR, $1, $6, NF } % awk -F: -f p3.awk /etc/passwd 2 root /var/root /bin/sh 7 3 daemon /var/root /usr/bin/false 7

awk Variables % cat p4.awk BEGIN {print "Scanning file"} { printf "line %d: %s\n", NR, $0 lineCount++; wordCount += NF; } END { printf "lines = %d, words = %d\n", lineCount, wordCount } % awk -f p4.awk /etc/passwd Scanning file line 1: nobody:*:-2:-2:Unprivileged User:/:/usr/bin/false line 2: root:*:0:0:System Administrator:/var/root:/bin/sh... line 37: lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false lines = 37, words = 141

awk Control Structures % cat p5.awk { for (i = NF; i >= 1; i--)‏ printf "%s ", $i; printf "\n"; } % awk -f p5.awk /etc/passwd User:/:/usr/bin/false nobody:*:-2:-2:Unprivileged Administrator:/var/root:/bin/sh root:*:0:0:System... Services:/var/spool/cups:/usr/bin/false lp:*:26:26:Printing

awk Condition Ranges Condition ranges:  two expressions separated by comma awk performs action on every line  from the first line that matches first expression  until line that matches second condition % awk -F: ' /nobody/,/root/ {print $0}' /etc/passwd nobody:*:-2:-2:Unprivileged User:/:/usr/bin/false root:*:0:0:System Administrator:/var/root:/bin/sh

awk Built-in Functions Built-in functions:  exp()‏  log()‏  sqrt()‏  substr() etc. % awk -F: '{print substr($1,1,2)}' /etc/passwd no ro... lp

Hard Links % ln original newLink  Creates a hard link to original file called newLink  Both labels will refer to the same file  File will be deleted only when both labels are removed  If newLink is a directory then links are made within the directory

Hard Link Example % cat > one This is an example file. % ln one two % cat two This is an example file. % vi two # changed “an” to “a great” % cat two This is a great example file. % cat one This is a great example file. % ls -l two -rw-r--r-- 2 mweeks mweeks 31 Sep 14 03:26 two

Soft (Symbolic) Links % ln -s original newLink  Symbolic/soft links can be created from one file system into another file system  Hard links are restricted to one file system Use ls -lL to view link details  which file it refers to ls -l displays the contents of the symbolic link % ls -l lrwxrwxrwx 1 root root :26 javac -> j2sdk1.4.2_05/bin/javac % ls -lL -rwxrwxr-x users :32 javac % ls -l j2sdk1.4.2_05/bin/javac -rwxrwxr-x users :32 j2sdk1.4.2_05/bin/javac

In Depth Unix files consist of two parts: the data part and the filename part. The data part is associated with something called an 'inode'. The inode carries the map of where the data is, the file permissions, etc. for the data.

In Depth The filename part carries a name and an associated inode number. More than one filename can reference the same inode number; these files are said to be 'hard linked' together.

In Depth a 'soft link' or a 'symbolic link' is a special file type whose data part carries a path to another file.

Substituting User % su [-] userName  If userName is not specified, root is assumed  Need access privileges for this  Requires password % sudo command  User can execute command as superuser  Requires password

Compress/Uncompress compress/uncompress  % compress fileName (.Z)‏  % uncompress fileName gzip  % gzip fileName (.gz)‏  % gunzip fileName crypt  % crypt key sample.crypt (to crypt)‏  % crypt key sample.txt (to uncrypt)‏  key could be any string

Stream Editor (sed)‏ sed  scans one or more text files  performs an edit on all lines that match a condition  actions and conditions may be stored in a file  may be specified at command line in single quotes  commands begin with an address or an addressRange or a Regular expression  does not modify the input file  writes modified file to standard output

Things You Can Do with sed a\ append lines to output until one not ending in \ b label branch to command : label c\ change lines to following text, as in a\ d delete lines i\ insert following text before next output l list line, making all non-printing characters visible  (tabs appear as >; lines broken with \) P print line q quit (for scripts) r file read file, copy contents to stdout

Things You Can Do with sed s/pat1/pat2/f substitute pat2 for pat1 f = g, replace all occurrences f = p, print f = w file, write to file t label test: branch to label if substitution made to current line w file write line(s) to file y/str1/str2/ replace each character from str1 with corresponding character from str2, no ranges allowed = print current input line number !cmd do sed cmd if line is not selected : label set label for b and t commands

Ranges by line number You can specify a range on line numbers by inserting a comma between the numbers. To restrict a substitution to the first 100 lines, you can use: sed '1,100 s/A/a/' If you know exactly how many lines are in a file, you can explicitly state that number to perform the substitution on the rest of the file. In this case, assume you used wc to find out there are 532 lines in the file: sed '101,532 s/A/a/' An easier way is to use the special character "$," which means the last line in the file. sed '101,$ s/A/a/' The "$" is one of those conventions that mean "last" in utilities like cat -e, vi, and ed. "cat -e" Line numbers are cumulative if several files are edited. That is, sed '200,300 s/A/a/' f1 f2 f3 >new is the same as cat f1 f2 f3 | sed '200,300 s/A/a/' >new

Ranges by patterns You can specify two regular expressions as the range. Assuming a "#" starts a comment, you can search for a keyword, remove all comments until you see the second keyword. In this case the two keywords are "start" and "stop:" sed '/start/,/stop/ s/#.*//' The first pattern turns on a flag that tells sed to perform the substitute command on every line. The second pattern turns off the flag. If the "start" and "stop" pattern occurs twice, the substitution is done both times. If the "stop" pattern is missing, the flag is never turned off, and the substitution will be performed on every line until the end of the file.

Substituting Text % sed 's/^/ /' file > file.new  indents each line in the file by 2 spaces % sed 's/^ *//' file > file.new  removes all leading spaces from each line of the file % sed '/a/d' file > file.new  deletes all lines containing 'a' Example: add two lines in the beginning of the file % cat sed1 1i\ abcd\ efg % sed -f sed1 file > file.new

Example Using sed Replace lines 1-3 by “Lines 1-3 are censored” % cat sed2 1,3c\ Lines 1-3 are censored % cat dummy2 one two three four five six % sed -f sed2 dummy2 Lines 1-3 are censored four five six

Example Using sed Multiple commands; replaces individual lines % cat sed3 1c\ Line 1 is censored 2c\ Line 2 is censored 3c\ Line 3 is censored % sed -f sed3 dummy2 Line 1 is censored Line 2 is censored Line 3 is censored four five six

Example Using sed % sed '$r file' f > g  appends file at end of file f % sed -e 's/^/ >/' file  multiple commands  -e option is optional! means script on command line % sed -e 's/^/ >/' dummy2 >

Translate Utility (tr)‏ % tr -cds string1 string2 maps all characters in std. input from character set string1 to the corresponding character in string2 If length of string2 is less, the last character is repeated.

Translate Utility (tr)‏ % tr -cds string1 string2  -c option causes string1 to be complemented (every character not in string1 now is in string1!)‏  -d option causes every character in string1 to be deleted from std. input  -s option causes every repeated character in string1 to be condensed to one occurrence

Examples of tr % tr a-z A-Z file2  causes lower-case to upper-case conversion % tr -c a X file2  causes every non-a character to be replaced by X (including newline)‏ % tr -c a-z '\012' file2  causes all non alphabetic characters to be replaced by ASCII 12 (newline)‏ % tr -d a-c file2  causes all a, b, c to be deleted from file1

Perl(Practical Extraction and Report Language) Perl takes its syntax and features from  Shell scripts  C programming Printing text:  print "hello world\n"; Variables: (untyped) always begins with a $  $i = 3;

Perl Range Operators In addition to standard arithmetic operators, a range operator is available. print 1, 2, 3..15, "\n"; # numbers, range print "AB", "BBBC", "CDD", "\n"; # strings print "A"."B"; # concatenation

Perl Arrays Arrays: dynamically allocated Array names begin symbol Array index begins at = = (1..15); "\n"; "\n"; # will print # will print 20

Perl Math and Logic Mathematical and Logical operators +, -, *, / ++, -- &&, ||

Perl Loops and Conditional Processing if-else, while, for (from C) and foreach (from C shell)‏ if ($i == 0) { print "it's true\n"; } else { print "it's false\n"; } while ($i <= $j) { print "it's true\n"; $i++; }

Perl Loops and Conditional Processing if-else, while, for (from C) and foreach (from C shell)‏ for ($i=0; $i<10; $i++) { print "\$i=",$i, "\n"; } foreach $i (1..15) { print "\$i=",$i, "\n"; }

Perl File = ; foreach $i { print "->", $i; # also reads in EOLN; # reads and prints each line # from stdin } $FILE = "info.dat"; = ; # an array of lines close(FILE); foreach $line { print "$line"; }

Perl Functions sub pound2dollars { $EXCHANGE_RATE = 1.54; $pounds = $_[0]; # refers to 1st argument return ($EXCHANGE_RATE * $pounds); } $book = 3.0; $value = pound2dollars($book); print "Value in dollars = $value\n";

Command Line Arguments to Perl $n = $#ARGV+1; # number of args (beginning 0)‏ print $n, " args: \n"; for ($i = 0; $i < n; $i++) { print } # pounds on command line: if ($#ARGV < 0) { print "Specify value in pounds to convert to dollars\n"; exit; } $poundvalue $dollarvalue = pounds2dollars($poundvalue); print "Value in dollars = $dollarvalue\n";

Perl Example loan -a amount -p payment -r rate prints a table showing each month; principal and interest and balance $i = 0; while ($i < $#ARGV) { if eq "-r") { $RATE } else { if eq "-a") { $AMOUNT } else { if eq "-p") { $PAYMENT } else { print "Unknown argument exit } $i++; }

Perl Example (continued)‏ if ($AMOUNT == 0 || $RATE == 0 || $PAYMENT == 0) { print "Specify -r rate -a amount -p payment\n"; exit } print "Original balance: \$$AMOUNT\n"; print "Interest rate : ${RATE}%\n"; print "Monthly payment : \$$PAYMENT\n"; print "\n"; print "Month\tPayment\tInterest\tPrincipal\tBalance\n\n"; $month = 1; $rate = $RATE/12/100; $balance = $AMOUNT; $payment = $PAYMENT;

Perl Example (continued)‏ while ($balance > 0) { $interest = roundUpAmount($rate * $balance); $principal = roundUpAmount($payment - $interest); if ($balance < $principal) { $principal = $balance; $payment = $principal + $interest; } $balance = roundUpAmount($balance - $principal); print "$month\t\$$payment\t\$$interest\t\t\$$principal\t\t\$$balance\n"; $month++; } sub roundUpAmount { $value = $_[0]; $newvalue = (int (($value * 100) + 0.5))/100; return $newvalue; }

Perl Example (continued)‏ $ perl loan.pl -r p 30 -a 300 Original balance: $300 Interest rate : 12.5% Monthly payment : $30 Month Payment Interest Principal Balance 1 $30 $3.13 $26.87 $ $30 $2.85 $27.15 $ $30 $2.56 $27.44 $ $30 $2.28 $27.72 $ $30 $1.99 $28.01 $ $30 $1.7 $28.3 $ $30 $1.4 $28.6 $ $30 $1.1 $28.9 $ $30 $0.8 $29.2 $ $30 $0.5 $29.5 $18.31

Review Advanced commands Pattern matching (grep)‏ Sort Comparing (cmp, diff)‏ Archiving (tar)‏ Scheduling (cron, at)‏ Pattern matching and processing (awk, sed)‏ Perl