9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
* [9fans] Revised sam cheat sheat
@ 2021-08-31  5:53 revcomninos
  2021-08-31  6:58 ` Sean Hinchee
  0 siblings, 1 reply; 2+ messages in thread
From: revcomninos @ 2021-08-31  5:53 UTC (permalink / raw)
  To: 9fans

[-- Attachment #1: Type: text/plain, Size: 7257 bytes --]

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 has a
window open


- the file has been
read by sam


* 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
your_script -- apply a sam script



------------------------------------------
9fans: 9fans
Permalink: https://9fans.topicbox.com/groups/9fans/T5a59d8c3b404b14d-Mcbaa0122bf6dba5f8794b600
Delivery options: https://9fans.topicbox.com/groups/9fans/subscription

[-- Attachment #2: Type: text/html, Size: 15962 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [9fans] Revised sam cheat sheat
  2021-08-31  5:53 [9fans] Revised sam cheat sheat revcomninos
@ 2021-08-31  6:58 ` Sean Hinchee
  0 siblings, 0 replies; 2+ messages in thread
From: Sean Hinchee @ 2021-08-31  6:58 UTC (permalink / raw)
  To: 9fans

This is awesome, thank you

Cheers,
Sean

On Mon, Aug 30, 2021 at 10:53 PM <revcomninos@gmail.com> wrote:
>
> 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 has a window open
>
> - the file has been read by sam
>
> * 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 your_script -- apply a sam script
>
>
> 9fans / 9fans / see discussions + participants + delivery options Permalink

------------------------------------------
9fans: 9fans
Permalink: https://9fans.topicbox.com/groups/9fans/T5a59d8c3b404b14d-M839d78d594076ff44368770d
Delivery options: https://9fans.topicbox.com/groups/9fans/subscription

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-08-31  6:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-31  5:53 [9fans] Revised sam cheat sheat revcomninos
2021-08-31  6:58 ` Sean Hinchee

9fans - fans of the OS Plan 9 from Bell Labs

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.vuxu.org/9fans

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 9fans 9fans/ https://inbox.vuxu.org/9fans \
		9fans@9fans.net
	public-inbox-index 9fans

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.vuxu.org/vuxu.archive.9fans


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git