| Linux Shell Scripting Tutorial (LSST) v1.05r3 | ||
|  Chapter 7: awk Revisited | ||
|  | ||
Syntax:
 \{n,\m}
 Matches any number of occurrence between n and m.
Example:
 $ sed -n '/10\{2,4\}1/p' demofile2
 1001
 10001
 100001
 Will match "1001", "10001", "100001" but not "101" or "10000000". Suppose you want to print all line that begins with *** (three stars or asterisks), then you can type command
 $ sed -n '/^\*..$/p' demofile2
 ***
 ***
 Above sed expression can be explianed as follows:
| Command | Explnation | 
| ^ | Beginning of line | 
| \* | Find the asterisk or star (\ remove the special meaning of '*' metacharacter) | 
| .. | Followed by any two character (you can also use \*\* i.e. $ sed -n '/^\*\*\*$/p' demofile2 ) | 
| $ | End of line (So that only three star or asterisk will be matched) | 
| /p | Print the pattern. | 
Even you can use following expression for the same purpose
 $ sed -n '/^\*\{2,3\}$/p' demofile2
Now following command will find out lines between *** and *** and then delete all those line
 $sed -e '/^\*\{2,3\}$/,/^\*\{2,3\}$/d' demofile2 > /tmp/fi.$$
 $cat /tmp/fi.$$
 Above expression can be explained as follows
| Expression | Meaning | 
| ^ | Beginning of line | 
| \* | Find the asterisk or star (\ remove the special meaning of '*' metacharacter) | 
| \{2,3\} | Find next two asterisk | 
| $ | End of line | 
| , | Next range or search pattern | 
| ^\*\{2,3\}$ | Same as above | 
| d | Now delete all lines between *** and *** range | 
You can group the commands in sed - scripts as shown following example
| $ cat > dem_gsed< | 
Now save above sed script and run it as follows:
 $ sed -f dem_gsed demofile2 > /tmp/fi.$$
 $ cat /tmp/fi.$$
Above sed scripts finds all line between *** and *** and performance following operations
 1) Delete blank line, if any using /^$/d expression.
 2) Substitute "Linux-Unix" for "Linux" word using s/Linux/Linux-Unix/ expression.
Our next example removes all blank line and converts multiple spaces into single space, for this purpose you need demofile3 file. Write sed script as follows:
| $ cat > rmblksp< | 
Run above script as follows:
 $ sed -f rmblksp demofile3
 Welcome to word of sed what sed is?
 I don't know what sed is but I think
 Rani knows what sed Is
 --------------------------------------------------
Above script can be explained as follows:
| Expression | Meaning | 
| /^$/d | Find all blank line and delete is using d command. | 
| s/ */ /g | Find two or more than two blank space and replace it with single blank space | 
Note that indicates two blank space and indicate one blank space.
For our next and last example create database file friends 
 Our task is as follows for friends database file:
 1)Find all occurrence of "A'bad" word replace it with "Aurangabad" word
 2)Exapand MH state value to Maharastra
 3)Find all blank line and replace with actual line (i.e. ========)
 4)Instert e-mail address of each persons at the end of persons postal address. For each person e-mail ID is different
To achieve all above task write sed script as follows:
| 
 | 
Run it as follows:
  $ sed -f mkchgfrddb friends > updated_friendsdb
 $ cat updated_friendsdb
 
 Above script can be explained as follows:
| Expression | Meaning | 
| s/A.bad/Aurangabad/g | Substitute Aurangabad for A'bad. Note that here second character in A'bad is ' (single quote), to match this single quote we have to use . (DOT - Special Metacharcter) that matches any single character. | 
| s/MH/Maharastra/g | Substitute Maharastra for MH | 
| s/^$/==========/g | Substitute blank line with actual line | 
| /V.K. /{ N N a\ email:vk@fackmail.co.in } | Match the pattern and follow the command between { and }, if pattern found. Here we are finding each friends initial name if it matches then we are going to end of his address (by giving N command twice) and appending (a command) friends e-mail address at the end. | 
Our last examples shows how we can manipulate text data files using sed. Here our tutorial on sed/awk ends but next version (LSST ver 2.0) will cover more real life examples, case studies using all these tools, plus integration with shell scripts etc.
| How to write sed scripts? | Examples of Shell Scripts | |