Revised Sam Cheat Sheet

Original Link

The last cheat sheet I posted was in need of revision and reordering. This one is better than the last–I hope.

CHEAT SHEET OF SAM COMMANDS

x cmd - set dot and run command on each matching line

. – apply command to dot

, – apply command to whole document

< replace dot with std input of command

! run the unix command

> send dot to std input of command

0<date – insert date

>spell – check spelling

>wc -l – count just the lines

>wc – do a line, word and character count

tr a-z A-Z – change case

,x/".+"/ y/"/ | tr [:lower:] [:upper:]

OR

,x/".+"/ y/"/ | tr a-z A-Z

– to capitalise all letters inside quotes

s/.*/*&*/ – enclose phrase in asterisks

fold -s – break up/format long lines
fmt – idem
sort – sort the file
uniq – delete juxtaposed duplicate lines
awk '!seen[$0]++' – delete non-juxtaposed duplicate lines

,x/\n+/a/\n/ – finds every occurrence of 1 or more (+) newlines (\n) and appends a new line.

vi or +/vi/ – search forward

0/regex/ – search from beg. of file forwards

0/regex/+-p – search for a string and select the whole line that contains it

/vi/+- m 0 selects and moves the next line containing "vi" to the top of the file

/vi/+- t 0 selects and copies the next line with "vi" to the top of the file

$/regex/ – search from end of the file backwards

Search for a string, and then go from search results in sam window to document:

,x g/hello/{

p

=

}

0,$ t "peter.c" 0 – copy contents of one to another

, and ; selects whole document

, equivalent to 0,$

0;5 and 0,5 - selects 1st five lines

-/^/+#10 – go to 10th column of current line

B < echo *.org – One can load multiple files by using <

B < grep -l vi * will load only those files that contain the string "vi"

D is the complement of B. It eradicates the file from sam's memory but does not delete the file from disk! Without a name argument removes current file

e replaces current file with one specified

f changes the filename

f <nl? – set the current filename to null

n gives a list of read and loaded files

{} Braces group commands

[ˆn] any char but n

[nm] n or m

w writes the whole file, or parts of a file to disk

< cat /home/red/bin/songs – insert contents of a file

r /home/red/bin/songs – idem

r replaces dot in the current file with the contents of the file specified

< /home/red/bin/songs – insert contents of a script

> /home/red/bin/pass google – output contents of script to sam window

< echo "Hello world" – insert ascii code at the current position

x/^/a/ / – indent the selected text by 1 tab. x means apply to all lines in the selection.

sam terminal information


. indicates the current file

the file is open in more than one instance

' the loaded file differs from the file on disk

.+\n – finds lines with text

.*\n – matches single whole lines

0/Ben/,/Son/ – find a range of text

.,/regexp/ – selects text FROM dot to the regex

./regexp// – selects the second occurrence of a regex

./regexp// – selects the third occurrence of a regex

vi/+/vi – search for the second occurrence of "vi" following dot

p – prints contents of dot in sam terminal

= – prints current value of dot in sam terminal

,t "junk" 0 – copy current file to start of file "junk"

Perform conditional ACTIONS on lines:

g/regexp/ command – g = if. If dot contains regexp, run command

g/test/d

,x g/vi/p – if a line has "vi" print the line in sam window

v/regexp/ command – If dot does not contain, run a command

,x/.*\n/ g/ed/ v/red/ p – find lines with ed but not red

,x/".+"/ y/"/ – search for text in quotes but do not show lines with "y"

,x/".+"/ x/"/ – search for text between quotes and only show the quotes

,x .*\n g/vi/ p - break file into lines, if lines contain "vi, print

,x/ +$/d – delete empty whitespace at end of every line

,x/'+$/i/ –color-auto/ – insert the phrase "–color-auto" into every line that ends in 1 or more '

.x/Peter/d – search dot for 'Peter' and delete 'Peter'

,x/\\v|\\c|\\s1|\\q1/d – multiple deletions

,x/\*/d – delete all asterisks

,x/^ /d – delete the indents

,x/^ +/d – delete all blank spaces at beginning of lines

,x/^$\n/d – delete all blank lines

,x/\n\n\n+/c/\n – change multiple blank lines into 1 blank line

,x/[0-9]/d – delete lines with numbers

,x/http.[^,]*?/d – search for "http…," and delete

C-i – create a tab stop of 8 spaces

,x/^/a/ / – indents text with a tab stop.

x/^ /d – remove 1 tab of indent from selection

,x/[‘‘’’“”‘’]/c/" – change all smart quotes into straight ones

,x/".+"/ x/"/ c/'/ – change double quotes (that surround one or more characters) to single quotes

,x/good/ c/bad/ – change "good" to "bad" on every line

,x/teh/c/the/

,x/Emacs/x/E/c/e/ - change all the capital "E"s in "Emacs" to lower case "e"s

X – is an iterator that works on files not lines

X D – remove out all up to date files

X/regexp/ command – Run command on files whose menu line matches

X/questions/D – close file called "questions"

X/\.sam$/,x/the/+-p – search multiple files for text and print the results

X/.*/,x/<cr>/d – strip <cr> from all files

X ,x/(.+\n)+/ g/account/+-p – look through every file, and every line, and if any line contains "account" print it out in sam window

s/.*/& Hello/ – add " Hello" to the end of line

s/good/bad/

The y command excludes from consideration in the seach that follows.

,y/ben/ x/(.+\n)+/g/Directory details/p

Y/regexp/ command – Exclude the file named by "regex" from consideration.

.x g/fred/ v/………/ c/jim/ – Look through dot. If dot contains "fred" change it to "jim" provided it is not "fred….."

,x[a-zA-Z]+/{

g/fred/ v/…../ c/jim/

g/jim/ v/…./ c/fred/

}

In the above command braces {} allow for multiple commands. The command says: search every line that contains 1 or more letters, if the line contains "fred" change it to "jim" and if "jim" change it to fred, provided "fred" is not "fred." and "jim" not "jim."

g - "if"

v" - "if not, unless the regex is"

,| ssam -f yourscript – apply a sam script