Sed: Difference between revisions

From Psygen Wiki
Jump to navigation Jump to search
Line 59: Line 59:
'''Example:''' <br />
'''Example:''' <br />
<code>sed 's/red/blue/g' < file.txt</code><br />
<code>sed 's/red/blue/g' < file.txt</code><br />


<code>/I</code> Ignore Case
<code>/I</code> Ignore Case

Revision as of 20:49, 10 January 2017

Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). Sed is similar editors that script edits, but sed only makes one pass over the input(s), and thus is more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.


Commands

: label

# comment

{....} Block

= print line number

a \ Append

b label Branch

c \ change

d and D Delete

g and G Get

h and H Hold

i \ Insert

l Look

n and N Next

p and P Print

q Quit

r filename Read File

Substitution:
s/..../..../ Substitute. Changes the 1st pattern to the second pattern.

Example: sed 's/red/blue/' < file.txt Changes "red" to "blue" in file.txt

    cat file.txt | sed 's/one/two/' Changes "one" to "two" in file.txt

The search pattern is on the left, and the replacement string is on the right. By default, sed replaces the first occurrence per line.


t label Test

w filename Write Filename

x eXchange

y/..../..../ Transform

sed Pattern Flags

/g Global. By default, sed only matches/replaces the first occurrence of a pattern for each line. The /g makes it replace all occurrences.
Example:
sed 's/red/blue/g' < file.txt


/I Ignore Case

/p Print

/w filename Write Filename

Special Characters

& Corresponds to the pattern found.

& is used when searching for a pattern and then adding some characters (such as parenthesis> around or near the pattern sed found. It's easy if you're searchin for a particular string:

sed 's/abc/(abc)/' <old.txt >new.txt - Replaces abc with (abc)

What if you don't know the output of the search string? You can use the special character &, it represents the pattern that sed found.

sed 's/[a-z]*/(&)/' <old.txt >new.txt


Command Line Options

-r   Enable sed to use Regular Expressions


References

  1. sed man page
  2. Grymoire sed tutorial