Intuition and ingenuity.

Mathematical reasoning may be regarded rather schematically as the exercise of a combination of two facilities, which we may call intuition and ingenuity. (Alan Turing)


Sed: Stream Editor

sed - stream editor for filtering and transforming text.
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). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s) and is consequently more efficient. But sed can filter text in a pipeline which particularly distinguishes it from other types of editors.
Sed is useful to swap, delete lines, add lines, replace lines... play with Arkanoid. Sed is too powerful to be explained in a short time , but some syntax for daily use can be described briefly.

Delete, in standard output, not directly on the file, all lines from the 3rd to the end

The output will be the first two lines of the files

sed '3,$d' testo1.txt # "$" stay for end of file, "d" stay for delete stefano,IT,unina marco,bio,unina

What is the difference between head -2 ???

sed -i '3,$d' testo1.txt # with the flagh "-i" we will work directly on the file, editing it. cat testo1.txt # display the file in order to check the result stefano,IT,unina # We've deleted all lines, except the 1st and the 2nd (from 3rd to EOF) marco,bio,unina # this operation is irreversible

Let's figure it out what would happen if...

awk 'NR>1' testo1.txt

And what with SED?
And what with "-i" flag?

sed -n '1!p' testo1.txt

Another example, this time to remove the last line on a file

sed '$ d' testo1.txt

Run again our script to restore file for our lesson


Use sed to replace a "," (or any other char or string) every 1st occurrence

sed 's/,/;/' testo1.txt stefano;IT,unina marco;bio,unina serena;bio,unina mario;IT,igb

Use sed to replace a "," (or any other char or string) globally

sed 's/,/;/g' testo1.txt # g stay for "global" stefano;IT;unina marco;bio;unina serena;bio;unina mario;IT;igb

Replace, only for biologists, the word "unina" with "MSA"

Use sed to replace a "," (or any other char or string) globally

grep bio testo1.txt | sed 's/unina/MSA/g' # we've used a grep to filter the word bio # So the standard output redirected with a pipe # to the command sed to replace "unina" with "MSA" marco,bio,MSA serena,bio,MSA

"Comment" with "#", every line of the file that contain "bio"

sed '/bio/s/^/#/g' testo1.txt # ^ means, write the new char at the beginnig of the line stefano,IT,unina #marco,bio,unina #serena,bio,unina mario,IT,igb

Delete every line that starts with the word "marco"

sed '/^marco/d' testo1.txt # ^ RegExp, d stay for "delete" stefano,IT,unina serena,bio,unina mario,IT,igb

Sed online official manual