250 likes | 267 Views
Learn about SED - a tool for text manipulation. Discover syntax, options, printing, deleting, and substituting using SED commands. Practice examples and understand its powerful stream-oriented capabilities.
E N D
(sed) Unix Talk #2
You have learned… Regular expressions, grep, & egrep grep & egrep are tools used to search for text in a file AWK -- powerful What about SED?
Things in common between awk and sed They are invoked using similar syntax Stream-oriented (hence stream editor) Use regular expressions for pattern matching Allow the user to specify instructions in a script
Common syntax Command [options] script filename Script You tell the program what to do, which is called instructions Each instruction has two parts Pattern Procedure (actions) (Sound familiar?)
SED A tool usually designed for a short line substitution, deletion and print Allows for automation of editing process similar to those you might find in vi or ex (or ed) Non-destructive Reads in a stream of data from a file, performs a set of actions, & outputs the results
SED SED reads the data one line at a time, make a copy of the input line & places it in a buffer called the pattern space Modifies that copy in the pattern space Outputs the copy to standard output NOTE: 1.The pattern space holds the line of text currently being processed 2. You don’t make changes to the original file 3. If you want to capture this output, what do you do?
SED Syntax Options n only prints matches fscriptfile run commands in scriptfile e allows multiple instructions on a single line Sed syntax Sed [option] ‘instruction’ file(s) Sed –f scriptfile file(s) Must give sed instruction or scriptfile Can use file redirection to create a new file
Sed options -e Only needed when you supply more than one instruction on the command line sed –e ‘script’ –e ‘script’ file
Print Command cat /home/fac/pub/fruit_prices sed –n 'p' fruit_prices What does it do? Try with out the –n. What happens?
Print Command Can specify zero, one or two addresses to print, the address can be a line number or the pattern for matching sed –n '1p' fruit_prices The line counter does not reset for multiple input files sed –n '$p' fruit_prices #prints last line sed –n '6,8p' #prints lines 8-10 sed –n '/^$/p' fruit_prices sed –n '1, /^$/p' fruit_prices # range sed –n '/App*/p' fruit_prices sed –n '/^[0-1]/p' fruit_prices sed –n '/[^7-9]$/p' fruit_prices What happens if you remove the caret?
Print Command sed –n '/\$1\./p' fruit_prices sed –n '/1./p' fruit_prices Need to use –n when printing, otherwise you get multiple copies of lines
Read data into a variable Create a script: read –p “Enter fruit name: ” fruitName sed –n “/$fruitName/p” fruit_prices Always surround you patterns with “” or ‘’ to prevent problems
Delete Command sed '/^A/d' fruit_prices Cat the file after you have run the command. Is the line gone?
Delete Command sed ‘1d’ fruit_prices sed ‘$d’ fruit_prices sed ‘/^$/d’ fruit_prices sed‘1,/^$/d’fruit_prices.txt > newfile
Substitute To change one pattern to another Syntax s/pattern/replacement/flags Flags n: A number (1 to 512) indicating that a replacement should be made for only the nth occurrence of the pattern g: Make changes globally on all occurrences in the pattern space. Normally only the first occurrence is replaces.
Substitute sed ‘s/Fruit/Fruit_list/’ fruit_prices sed ‘s/a/A/g’ fruit_prices Try the previous command without g If you like to change the original file, you must do copy and redirect to update original file cp fruit_prices fruit_prices.old sed ‘s/Fruit/Fruit_list/’ fruit_prices.old>fruit_prices
Substitute Reuse the matched string with ‘&’ Sed ‘s/[0-9]\.[0-9][0-9]*/\$&/’ filename
sed – the Stream Editor.1 sed is an editor for editing data on the fly as part of a pipeline Usage: sed -e 'command' -e 'command' -e 'command' ... Reads stdin and applies the commands to each line in the order they are on the command line Prints each line of stdin to stdout after the commands have been applied Most commands are s/ . . . / . . . / commands Can use regexps in the 1st part Can use parentheses, back references in the 1st part Can use & and \1 \2 \3 . . . in the second part Can append ‘g’ to the s/ . . . / . . . / command to change all occurrences on a line
sed – the Stream Editor.2 Examples: Print out all usernames from /etc/passwd sed -e 's/^\([^:]*\):.*$/\1/' </etc/passwd Print out ONLY the hidden files in the working directory # delete lines that do NOT begin with a period ls -a | sed -e '/^[^.]/d‘ OR # print ONLY lines that DO begin with a period # NOTE: -n option suppresses printing unless # indicated via a p command ls -a | sed -n -e '/^\./p' Print out file names followed by the time of modification # NOTE: -r option enables extended regexps WITHOUT # the need to escape parentheses ls -l | sed -r -e 's/^([^ ]+ +){5}//' \ -e 's/^(.*) (.*)/\2 -> \1/'
Append a \ text Appends text to the linefollowing the one matched sed ‘/^F/a\ #here is a list of the fruit’ fruit_prices
Insert i \ text Inserts text prior to the line that is matched sed ‘/^Pi/i\ Orange: $1.99’ fruit_prices.old>fruit_prices
Scripts When? Series of sed commands Syntax sed –f scriptname datafilename
Scripts Cat scriptTest s/^A/a/g s/^P/p/ sed –f scriptTest fruit_prices sed –e ‘s/^A/a/g’ –e ‘s/^P/p/’ fruit_prices
Using sed in a Pipeline id uid=500(yxp) gid=100(fac) id | sed ‘s/(.*$//’ uid=500
Using sed in a Pipeline cat fruit_prices | sed ‘s/A/a/g’ ls –l | sed –n p echo Hello | sed p