What are the main differences among them? And in which typical scenarios is it better to use each language?
After mastering a few dozen languages, you get tired of people like S. Lott (see his controversial answer to this question, nearly half as many down-votes as up (+45/-22) six years after answering).
Sed is the best tool for extremely simple command-line pipelines.  In the hands of a sed master, it's suitable for one-offs of arbitrary complexity, but it should not be used in production code except in very simple substitution pipelines.  Stuff like 's/this/that/.'
Gawk (the GNU awk) is by far the best choice for complex data reformatting when there is only a single input source and a single output (or, multiple outputs sequentially written).  Since a great deal of real-world work conforms to this description, and a good programmer can learn gawk in two hours, it is the best choice.  On this planet, simpler and faster is better!
Perl or Python are far better than any version of awk or sed when you have very complex input/output scenarios.  The more complex the problem is, the better off you are using python, from a maintenance and readability standpoint.  Note, however, that a good programmer can write readable code in any language, and a bad programmer can write unmaintainable crap in any useful language, so the choice of perl or python can safely be left to the preferences of the programmer if said programmer is skilled and clever.
What are the differences between Perl, Python, AWK and sed?