tinyscripts/ed_cheat_sheet.txt

367 lines
25 KiB
Plaintext
Raw Permalink Normal View History

2025-02-05 13:35:50 +01:00
.---------------------------------------------------------------------.
| |
| The Original UNIX Text Editor |
| Ed Cheat Sheet |
| |
'---------------------------------------------------------------v1.14-'
| Created by Peter Krumins (peter@catonmat.net, @pkrumins on twitter) |
| www.catonmat.net -- good coders code, great coders reuse |
'---------------------------------------------------------------------'
====================== Line Addressing Summary ======================
.----------------.----------------------------------------------------.
| | |
| Address Symbol | Description |
| | |
'----------------+----------------------------------------------------'
| . | The current line (address) in the buffer. |
'----------------+----------------------------------------------------'
| $ | The last line in the buffer. |
'----------------+----------------------------------------------------'
| n | The nth, line in the buffer where n is a number |
| | in the range [0,$]. |
'----------------+----------------------------------------------------'
| $ | The last line in the buffer. |
'----------------+----------------------------------------------------'
| - | The previous line. This is equivalent to -1 and |
| ^ | may be repeated with cumulative effect. |
'----------------+----------------------------------------------------'
| -n | The nth previous line, where n is a non-negative |
| ^n | number. |
'----------------+----------------------------------------------------'
| + | The next line. This is equivalent to +1 and may |
| | be repeated with cumulative effect. |
'----------------+----------------------------------------------------'
| +n | The nth next line, where n is a non-negative |
| whitespace n | number. |
| | Whitespace followed by a number n is interpreted |
| | as +n. |
'----------------+----------------------------------------------------'
| , | The first through last lines in the buffer. |
| % | This is equivalent to the address range 1,$. |
'----------------+----------------------------------------------------'
| ; | The current through last lines in the buffer. |
| | This is equivalent to the address range .,$. |
'----------------+----------------------------------------------------'
| /re/ | The next line containing the regular |
| | expression re. |
| | The search wraps to the beginning of the buffer |
| | and continues down to the current line, if |
| | necessary. |
| | // repeats the last search. |
'----------------+----------------------------------------------------'
| ?re? | The previous line containing the regular |
| | expression re. |
| | The search wraps to the end of the buffer and |
| | continues up to the current line, if necessary. |
| | ?? repeats the last search. |
'----------------+----------------------------------------------------'
| 'lc | The line previously marked by a `k' (mark) |
| | command, where lc is a lower case letter. |
'----------------'----------------------------------------------------'
Each address in a comma-delimited range is interpreted relative
to the current address.
In a semicolon-delimited range, the 1st address is used to set
the current address, and the 2nd address is interpreted
relative to the first.
========================== Command Summary ==========================
.-------------------------.-------------------------------------------.
| | |
| Command | Description |
| | |
'-------------------------+-------------------------------------------'
| (.)a | Appends text to the buffer after the |
| | addressed line, which may be theaddress |
| | 0 (zero). Text is entered in input mode. |
| | The current address is set to last line |
| | entered. |
'-------------------------+-------------------------------------------'
| (.,.)c | Changes lines in the buffer. The |
| | addressed lines are deleted from the |
| | buffer, and text is appended in their |
| | place. |
| | Text is entered in input mode. The |
| | current address is set to last line |
| | entered. |
'-------------------------+-------------------------------------------'
| (.,.)d | Deletes the addressed lines from the |
| | buffer. If there is a line after the |
| | deleted range, then the current address |
| | is set to this line. Otherwise the |
| | current address is set to the line before |
| | the deleted range. |
'-------------------------+-------------------------------------------'
| e file | Edits file, and sets the default |
| | filename. If file is not specified, then |
| | the default filename is used. Any lines |
| | in the buffer are deleted before the new |
| | file is read. The current address is set |
| | to the last line read. |
'-------------------------+-------------------------------------------'
| e !command | Edits the standard output of `!command', |
| | (see !command below). The default |
| | filename is unchanged. Any lines in the |
| | buffer are deleted before the output of |
| | command is read. The current address is |
| | set to the last line read. |
'-------------------------+-------------------------------------------'
| E file | Edits file unconditionally. This is |
| | similar to the e command, except that |
| | unwritten changes are discarded without |
| | warning. The current address is set to |
| | the last line read. |
'-------------------------+-------------------------------------------'
| f file | Sets the default filename to file. If |
| | file is not specified, then the default |
| | unescaped filename is printed. |
'-------------------------+-------------------------------------------'
| (1,$)g/re/command-list | Applies command-list to each of the |
| | addressed lines matching a regular |
| | expression re. The current address is set |
| | to the line currently matched before |
| | command-list is executed. At the end of |
| | the `g' command, the current address is |
| | set to the last line affected by |
| | command-list. |
| | |
| | Each command in command-list must be on a |
| | separate line, and every line except for |
| | the last must be terminated by a |
| | back­slash (\). Any commands are allowed, |
| | except for `g', `G', `v', and `V'. |
| | A newline alone in command-list is |
| | equivalent to a `p' command. |
'-------------------------+-------------------------------------------'
| (1,$)G/re/ | Interactively edits the addressed lines |
| | matching a regular expression re. For |
| | each matching line, the line is printed, |
| | the current address is set, and the user |
| | is prompted to enter a command-list. |
| | At the end of the `G' command, the |
| | current address is set to the last line |
| | affected by (the last) command-list. |
| | |
| | The format of command-list is the same as |
| | that of the `g' command. A newline alone |
| | acts as a null command list. A single `&' |
| | repeats the last non-null command list. |
'-------------------------+-------------------------------------------'
| H | Toggles the printing of error |
| | explanations. By default, explanations |
| | are not printed. It is recommended that |
| | ed scripts begin with this command to aid |
| | in debugging. |
'-------------------------+-------------------------------------------'
| h | Prints an explanation of the last error. |
'-------------------------+-------------------------------------------'
| (.)i | Inserts text in the buffer before the |
| | current line. Text is entered in input |
| | mode. The current address is set to the |
| | last line entered. |
'-------------------------+-------------------------------------------'
| (.,.+1)j | Joins the addressed lines. The addressed |
| | lines are deleted from the buffer and |
| | replaced by a single line containing |
| | their joined text. The current address is |
| | set to the resultant line. |
'-------------------------+-------------------------------------------'
| (.)klc | Marks a line with a lower case letter lc. |
| | The line can then be addressed as 'lc |
| | (i.e., a single quote followed by lc) in |
| | subsequent commands. The mark is not |
| | cleared until the line is deleted or |
| | otherwise modified. |
'-------------------------+-------------------------------------------'
| (.,.)l | Prints the addressed lines unambiguously. |
| | If invoked from a terminal, ed pauses at |
| | the end of each page until a newline is |
| | entered. The current address is set to |
| | the last line printed. |
'-------------------------+-------------------------------------------'
| (.,.)m(.) | Moves lines in the buffer. The addressed |
| | lines are moved to after the right-hand |
| | destination address, which may be the |
| | address 0 (zero). The current address is |
| | set to the last line moved. |
'-------------------------+-------------------------------------------'
| (.,.)n | Prints the addressed lines along with |
| | their line nums. The curr. addr is set to |
| | the last line printed |
'-------------------------+-------------------------------------------'
| (.,.)p | Prints the addressed lines. If invoked |
| | from a terminal, ed pauses at the end of |
| | each page until a newline is entered. |
| | The current address is set to the last |
| | line printed. |
'-------------------------+-------------------------------------------'
| P | Toggles the command prompt on and off. |
| | Unless a prompt was specified by with |
| | command-line option -p string, the |
| | command prompt is by default turned off. |
'-------------------------+-------------------------------------------'
| q | Quits ed. |
'-------------------------+-------------------------------------------'
| Q | Quits ed unconditionally. This is similar |
| | to the q command, except that unwritten |
| | changes are discarded without warning. |
'-------------------------+-------------------------------------------'
| ($)r file | Reads file to after the addressed line. |
| | If file is not specified, then the |
| | default filename is used. If there was no |
| | default filename prior to the command, |
| | then the default filename is set to file. |
| | Otherwise, the default filename is |
| | unchanged. The current address is set to |
| | the last line read. |
'-------------------------+-------------------------------------------'
| ($)r !command | Reads to after the addressed line the |
| | standard output of `!command', |
| | (see the !command below). The default |
| | filename is unchanged. The current |
| | address is set to the last line read. |
'-------------------------+-------------------------------------------'
| (.,.)s/re/replacement/ | Replaces text in the addressed lines |
| (.,.)s/re/replacement/g | matching a regular expression re with |
| (.,.)s/re/replacement/n | replacement. By default, only the first |
| | match in each line is replaced. |
| | If the `g' (global) suffix is given, then |
| | every match to be replaced. |
| | The `n' suffix, where n is a positive |
| | number, causes only the n-th match to be |
| | replaced. It is an error if no |
| | substitutions are performed on any |
| | of the addressed lines. The current |
| | address is set the last line affected. |
| | |
| | re and replacement may be delimited by |
| | any character other than space and |
| | newline (see the `s' command below). |
| | If one or two of the last delimiters is |
| | omitted, then the last line affected is |
| | printed as though the print suffix `p' |
| | were specified. |
| | |
| | An unescaped `&' in replacement is |
| | replaced by the currently matched text. |
| | The character sequence `\m', where m is a |
| | number in the range [1,9], is replaced by |
| | the m-th backreference expression of the |
| | matched text. If replacement consists of |
| | a single `%', then replacement from the |
| | last substitution is used. Newlines may |
| | be embedded in replacement if they are |
| | escaped with a backslash (\). |
'-------------------------+-------------------------------------------'
| (.,.)s | Repeats the last substitution. This form |
| | of the `s' command accepts a count suffix |
| | `n', or any combination of the characters |
| | `r', `g', and `p'. |
| | If a count suffix `n' is given, then only |
| | the n-th match is replaced. |
| | The `r' suffix causes the regular |
| | expression of the last search to be used |
| | instead of that of the last substitution. |
| | The `g' suffix toggles the global suffix |
| | of the last substitution. |
| | The `p' suffix toggles the print suffix |
| | of the last substitution. The current |
| | address is set to the last line affected. |
'-------------------------+-------------------------------------------'
| (.,.)t(.) | Copies (i.e., transfers) the addressed |
| | lines to after the right-hand destination |
| | address, which may be the address |
| | 0 (zero). The current address is set to |
| | the last line copied. |
'-------------------------+-------------------------------------------'
| u | Undoes the last command and restores the |
| | current address to what it was before the |
| | command. The global commands `g', `G', |
| | `v', and `V' are treated as a single |
| | command by undo. `u' is its own inverse. |
'-------------------------+-------------------------------------------'
| (1,$)v/re/command-list | Applies command-list to each of the |
| | addressed lines not matching a regular |
| | expression re. This is similar to the |
| | `g' command. |
'-------------------------+-------------------------------------------'
| (1,$)V/re/ | Interactively edits the addressed lines |
| | not matching a regular expression re. |
| | This is similar to the `G' command. |
'-------------------------+-------------------------------------------'
| (1,$)w file | Writes the addressed lines to file. Any |
| | previous contents of file is lost without |
| | warning. If there is no default filename, |
| | then the default filename is set to file, |
| | otherwise it is unchanged. If no filename |
| | is specified, then the default filename |
| | is used. The current address is unchanged.|
'-------------------------+-------------------------------------------'
| (1,$)wq file | Writes the addressed lines to file, and |
| | then executes a `q' command. |
'-------------------------+-------------------------------------------'
| (1,$)w !command | Writes the addressed lines to the |
| | standard input of `!command', (see the |
| | !command below). |
| | The defaultfilename and current address |
| | are unchanged. |
'-------------------------+-------------------------------------------'
| (1,$)W file | Appends the addressed lines to the end of |
| | file. This is similar to the `w' command, |
| | expect that the previous contents of file |
| | is not clobbered. The current address is |
| | unchanged. |
'-------------------------+-------------------------------------------'
| (.)x | Copies (puts) the contents of the cut |
| | buffer to after the addressed line. |
| | The current address is set to the last |
| | line copied. |
'-------------------------+-------------------------------------------'
| (.,.)y | Copies (yanks) the addressed lines to the |
| | cut buffer. The cut buffer is overwritten |
| | by subsequent `y', `s', `j', `d', or `c' |
| | commands. The current address is |
| | unchanged. |
'-------------------------+-------------------------------------------'
| (.+1)zn | Scrolls n lines at a time starting at |
| | addressed line. If n is not specified, |
| | then the current window size is used. |
| | The current address is set to the last |
| | line printed. |
'-------------------------+-------------------------------------------'
| !command | Executes command via sh(1). If the first |
| | character of command is `!', then it is |
| | replaced by text of the previous |
| | `!command'. ed does not process command |
| | for backslash (\) escapes. However, an |
| | unescaped `%' is replaced by the default |
| | filename. When the shell returns from |
| | execution, a `!' is printed to the |
| | standard output. The current line is |
| | unchanged. |
'-------------------------+-------------------------------------------'
| (.,.)# | Begins a comment; the rest of the line, |
| | up to a newline, is ignored. If a line |
| | address followed by a semicolon is given, |
| | then the current address is set to that |
| | address. Otherwise, the current address |
| | is unchanged. |
'-------------------------+-------------------------------------------'
| ($)= | Prints the line number of the addressed |
| | line. |
'-------------------------+-------------------------------------------'
| (.+1)newline | Prints the addressed line, and sets the |
| | current address to that line. |
'-------------------------'-------------------------------------------'
=====================================================================
.---------------------------------------------------------------------.
| Created by Peter Krumins (peter@catonmat.net, @pkrumins on twitter) |
| www.catonmat.net -- good coders code, great coders reuse |
'---------------------------------------------------------------------'