UsageThe following example shows a typical use of sed, where the -e option indicates that the sed expression follows: sed -e 's/oldstuff/newstuff/g' inputFileName > outputFileName In many versions, the -e is not required to precede the expression. The s stands for substitute. The g stands for global, which means that all matching occurrences in the line would be replaced. The regular expression (i.e. pattern) to be searched is placed after the first delimiting symbol (slash here) and the replacement follows the second symbol. Slash is the conventional symbol. Any other could be used to make syntax more readable if it does not occur in the pattern or replacement (see below). Under Unix, sed is often used as a filter in a pipeline: generate_data | sed -e 's/x/y/g' That is, generate the data, and then make the small change of replacing x with y. Several substitutions or other commands can be put together in a file called, for example, subst.sed and then be applied using the -f option to read the commands from the file: sed -f subst.sed inputFileName > outputFileName Besides substitution, other forms of simple processing are possible. For example, the following uses the d command to delete lines that are either blank or only contain spaces: sed -e '/^ *$/d' inputFileName This example used some of the following regular expression metacharacters:
Complex sed constructs are possible, allowing it to serve as a simple, but highly specialised, programming language. Flow of control, for example, can be managed by the use of a label (a colon followed by a string) and the branch instruction b. An instruction b followed by a valid label name will move processing to the block following that label. If the label does not exist then the branch will end the script. Historysed is one of the very early Unix commands built for command line processing of data files. It evolved as the natural successor to the popular grep command.3 Cousin to the later AWK, sed allowed powerful and interesting data processing to be done by shell scripts. sed and AWK are often cited as the progenitors and inspiration for Perl. The s/// syntax shown above is part of Perl's syntax and originated with ed, the precursor to sed. sed's language does not have variables and has only primitive GOTO and branching functionality; nevertheless, the language is Turing-complete.3 4 GNU sed includes several new features such as in-place editing of files (i.e., replace the original file with the result of applying the sed program). In-place editing is often used instead of ed scripts: for example, sed -i 's/abc/def/' file can be used instead of ed file 1,$ s/abc/def/ w q Super-sed is an extended version of sed that includes regular expressions compatible with Perl. Another variant of sed is minised, originally reverse-engineered from the 4.1BSD sed by Eric S. Raymond and currently maintained by René Rebe. minised was used by the GNU project until the GNU project wrote a new version of sed based on the new GNU regular expression library. The current minised contains some extensions to BSD sed but is not as feature-rich as GNU sed. Its advantage is that it is very fast and uses little memory.citation needed It is used on embedded systems and is the version of sed provided with Minix.citation needed SamplesIn this example, sed, which usually only works on one line, removes newlines from sentences where the second sentence starts with one space. Consider the following text: This is my cat my cat's name is betty This is my dog my dog's name is frank The sed script below will turn it into: This is my cat my cat's name is betty This is my dog my dog's name is frank Here's the script: sed 'N;s/\n / /;P;D;'
The context addressConditioned commands are possible using the "context address": /addr-pattern/s/search-pattern/replacement/flags or more readable variants: /addr-pattern/s~search-pattern~replacement~flags /addr-pattern/s,search-pattern,replacement,flags Here, 'addr-pattern' is the address, which defines lines, where substitution of 'search-pattern' with 'replacement' will be done. Likewise: /addr-pattern/!s,search-pattern,replacement,flags substitute will be executed if no 'addr-pattern' was matched. For example, replace "world" with "mom", but only on lines which contain the word "you": sh$ sed -e '/you/s,world,mom,g' <<" EOF" Hello world. Hello world. I love you. EOF Hello world. Hello mom. I love you. sh$ Negation will be: sh$ sed -e '/you/!s,world,mom,g' <<" EOF" Hello world. Hello world. I love you. EOF Hello mom. Hello world. I love you. sh$ Exotic examplesDespite the inherent limitations, sed scripts exist for games as sokoban, arkanoid5, and a recent implementation of tetris.6 Further reading
References
See alsoExternal links
| | |||||||||||||||||||||||||||||