Transcript sed
Unix Talk #2
(sed)
You have learned…
Regular expressions, grep, & egrep
grep & egrep are tools used to search for
text in a file
AWK -- powerful
What about SED?
2
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
3
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?)
4
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
5
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?
6
SED Syntax
Options
–n
only prints matches
– f scriptfile
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
7
Sed options
-e
– Only needed when you supply more than one
instruction on the command line
– sed –e ‘script’ –e ‘script’ file
8
Print Command
cat /home/fac/pub/fruit_prices
sed –n 'p' fruit_prices
What does it do?
Try with out the –n. What happens?
9
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
sed
sed
sed
sed
–n
–n
–n
–n
–n
'/^$/p' fruit_prices
'1, /^$/p' fruit_prices # range
'/App*/p' fruit_prices
'/^[0-1]/p' fruit_prices
'/[^7-9]$/p' fruit_prices
What happens if you remove the caret?
10
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
11
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
12
Delete Command
sed '/^A/d' fruit_prices
Cat the file after you have run
the command. Is the line gone?
13
Delete Command
sed ‘1d’ fruit_prices
sed ‘$d’ fruit_prices
sed ‘/^$/d’ fruit_prices
sed‘1,/^$/d’fruit_prices.txt >
newfile
14
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.
15
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
16
Substitute
Reuse the matched string with ‘&’
Sed ‘s/[0-9]\.[0-9][0-9]*/\$&/’ filename
17
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
18
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/'
19
Append
a \ text
Appends text to the line following the one
matched
sed ‘/^F/a\ #here is a list of the fruit’
fruit_prices
20
Insert
i \ text
Inserts text prior to the line that is matched
sed ‘/^Pi/i\ Orange:
$1.99’
fruit_prices.old>fruit_prices
21
Scripts
When?
Series of sed commands
Syntax
sed –f scriptname datafilename
22
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
23
Using sed in a Pipeline
id
uid=500(yxp) gid=100(fac)
id | sed ‘s/(.*$//’
uid=500
24
Using sed in a Pipeline
cat fruit_prices | sed ‘s/A/a/g’
ls –l | sed –n p
echo Hello | sed p
25