Sed Cheat Sheet
.---------------------------------------------------------------------. | | | UNIX Stream Editor | | Sed Cheat Sheet | | | '---------------------------------------------------------------------' | Created by Peter Krumins (peter@catonmat.net, @pkrumins on twitter) | | www.catonmat.net -- good coders code, great coders reuse | '---------------------------------------------------------------------' ==================== How Commands Affect Streams ==================== .---------.-----------.-----------------------------------------. | | | Modifications to: | | | Address '---------.---------.---------.-----------' | Command | or Range | Input | Output | Pattern | Hold | | | | Stream | Stream | Space | Buffer | '---------+-----------+---------+---------+---------+-----------' | = | - | - | + | - | - | | a | 1 | - | + | - | - | | b | 2 | - | - | - | - | | c | 2 | - | + | - | - | | d | 2 | + | - | + | - | | D | 2 | + | - | + | - | | g | 2 | - | - | + | - | | G | 2 | - | - | + | - | | h | 2 | - | - | - | + | | H | 2 | - | - | - | + | | i | 1 | - | + | - | - | | l | 1 | - | + | - | - | | n | 2 | + | * | - | - | | N | 2 | + | - | + | - | | p | 2 | - | + | - | - | | P | 2 | - | + | - | - | | q | 1 | - | - | - | - | | r | 1 | - | + | - | - | | s | 2 | - | - | + | - | | t | 2 | - | - | - | - | | w | 2 | - | + | - | - | | x | 2 | - | - | + | + | | y | 2 | - | - | + | - | '---------'-----------'---------'---------'---------'-----------' Modifications to: 1 Command takes single address or pattern. 2 Command takes pair of addresses. - Command does not modify the buffer. + Command modifies the buffer. * The ``n'' command may or may not generate output depending on the ``-n'' command option. ========================== Command Summary ========================== .----------------.----------------------------------------------------. | | | | Command | Description | | | | '----------------+----------------------------------------------------' | # | Adds a comment. | '----------------+----------------------------------------------------' | = | The "=" command prints the current line number to | | | standard output. | '----------------+----------------------------------------------------' | a \ | The "a" command appends text after the | | text | range or pattern. | '----------------+----------------------------------------------------' | b label | The "b" command branches to the label. You can | | | specify a label with a text string followed by a | | | colon. If no label is there, branch to the end of | | | the script. | '----------------+----------------------------------------------------' | c \ | The "c" command changes the current line with | | text | text. | '----------------+----------------------------------------------------' | d | The "d" command deletes the current pattern space, | | | reads in the next line, puts the new line into the | | | pattern space, and aborts the current command, and | | | starts execution at the first sed command. | '----------------+----------------------------------------------------' | D | The "D" command deletes the first portion of the | | | pattern space, up to the new line character, | | | leaving the rest of the pattern alone. | '----------------+----------------------------------------------------' | g | Instead of exchanging (the "x" command) the hold | | | space with the pattern space, you can copy the | | | hold space to the pattern space with the "g" | | | command. | '----------------+----------------------------------------------------' | G | If you want to append to the pattern space, use | | | the "G" command. | '----------------+----------------------------------------------------' | h | The "h" command copies the pattern buffer into the | | | hold buffer. | '----------------+----------------------------------------------------' | H | The "H" command allows you to combine several | | | lines in the hold buffer. It acts like the "N" | | | command as lines are appended to the buffer, with | | | a "\n" between the lines. You can save several | | | lines in the hold buffer, and print them only if a | | | particular pattern is found later. | '----------------+----------------------------------------------------' | i \ | You can insert text before the pattern with | | text | the "i" command. | '----------------+----------------------------------------------------' | l | The "l" command prints the current pattern space. | | | It is therefore useful in debugging sed scripts. | | | It also converts unprintable characters into | | | printing characters by outputting the value in | | | octal preceded by a "\" character. | '----------------+----------------------------------------------------' | n | The "n" command will print out the current pattern | | | space (unless the "-n" flag is used), empty the | | | current pattern space, and read in the next | | | line of input. | '----------------+----------------------------------------------------' | N | The "N" command does not print out the current | | | pattern space and does not empty the pattern | | | space. It reads in the next line, but appends a | | | new line character along with the input line | | | itself to the pattern space. | '----------------+----------------------------------------------------' | p | Another useful command is the print command: "p". | | | If sed wasn't started with an "-n" option, the "p" | | | command will duplicate the input. The "p" command | | | prints the entire pattern space. | '----------------+----------------------------------------------------' | P | The "P" command only prints the first part of the | | | pattern space, up to the NEWLINE character. | '----------------+----------------------------------------------------' | q | There is one more simple command that can restrict | | | the changes to a set of lines. It is the "q" | | | command: quit. This command is most useful when | | | you wish to abort the editing after some condition | | | is reached. | '----------------+----------------------------------------------------' | r filename | The "r" command will append text from filename | | | after the range or pattern. | '----------------+----------------------------------------------------' | s/regex/repl/ | The substitute command replaces all occurrences of | | | the regular expression (regex) with repl(acement) | '----------------+----------------------------------------------------' | t label | You can execute a branch if a pattern is found. | | | You may want to execute a branch only if a | | | substitution is made. The command "t label" will | | | branch to the label if the last substitute command | | | modified the pattern space. | '----------------+----------------------------------------------------' | w filename | With this command, you can specify a filename that | | | will receive the modified data. | '----------------+----------------------------------------------------' | x | The "x" command exchanges the hold buffer and the | | | pattern buffer. | '----------------+----------------------------------------------------' | y/source/dest/ | Transliterate the characters in the pattern space, | | | which appear in source to the corresponding | | | character in dest(ination). | '----------------'----------------------------------------------------' ======================== Command Extensions ========================= .----------------.----------------------------------------------------. | | | | Command | Description | | | | '----------------+----------------------------------------------------' | Q | Immediately quit the sed script without processing | | | any more input. (zero or one address command) | '----------------+----------------------------------------------------' | R filename | Append a line read from filename. (zero or one | | | address command). | '----------------+----------------------------------------------------' | T label | If no s/// has done a successful substitution | | | since the last input line was read and since the | | | last t or T command, then branch to label; | | | if label is omitted, branch to end of script. | | | (accepts address range). | '----------------+----------------------------------------------------' | W filename | Write the first line of the current pattern space | | | to filename. (accepts address range). | '----------------'----------------------------------------------------' ======================= Address Range Summary ======================= .----------------.----------------------------------------------------. | | | | Format | Description | | | | '----------------+----------------------------------------------------' | number | Match only the specified line number. | '----------------+----------------------------------------------------' | first~step | Match every step'th line starting with line first. | '----------------+----------------------------------------------------' | $ | Match the last line. | '----------------+----------------------------------------------------' | 0, addr2 | Start out in "matched first address" state, | | | until addr2 is found. | '----------------+----------------------------------------------------' | /regex/ | Match lines matching the regular expression regex. | '----------------+----------------------------------------------------' | addr1,+N | Will match addr1 and the N lines following addr1. | '----------------+----------------------------------------------------' | \cregexc | Match lines matching the regular expression regex. | | | The c may be any character. | '----------------+----------------------------------------------------' | addr1,~N | Will match addr1 and the lines following addr1 | | | until the next line whose input line number | | | is a multiple of N. | '----------------'----------------------------------------------------' ============== GNU Sed's Command Line Argument Summary ============== .---------------------.-----------------------------------------------. | | | | Argument | Description | | | | '---------------------+-----------------------------------------------' | -n | | | --quiet | Suppress automatic printing of pattern space. | | --silent | | '---------------------+-----------------------------------------------' | -e script | | | --expression=script | Add the script to the commands to be executed.| | | | '---------------------+-----------------------------------------------' | -f script-file | Add the contents of script-file to the | | --file=script-file | commands to be executed. | '---------------------+-----------------------------------------------' | -i[suffix] | Sdit files in place (makes backup if | | --in-place[=suffix] | extension supplied). | '---------------------+-----------------------------------------------' | -l N | Specify the desired line-wrap length for | | --line-length=N | the `l' command. | '---------------------+-----------------------------------------------' | -r | Use extended regular expressions in the | | --regexp-extended | script. | '---------------------+-----------------------------------------------' | -s | Consider files as separate rather than as a | | --separate | single continuous long stream. | '---------------------+-----------------------------------------------' | -u | Load minimal amounts of data from the input | | --unbuffered | files and flush the output buffers more often.| '---------------------+-----------------------------------------------' | --help | Display this help and exit | '---------------------+-----------------------------------------------' | -V | Output version information and exit | | --version | | '---------------------'-----------------------------------------------' ===================================================================== .---------------------------------------------------------------------. | Created by Peter Krumins (peter@catonmat.net, @pkrumins on twitter) | | www.catonmat.net -- good coders code, great coders reuse | '---------------------------------------------------------------------'