The quick answer (no explanation):
The language $$L=a^*b^*c^* - \{a^n b^n c^n \mid n \geq 0 \}$$ is equal to
$$L=\{a^{i}b^{j} c^{k} \mid i\neq j\}\cup \{a^{i}b^{j}c^{k} \mid j\neq k\}$$
which is the union of two CF languages, thus CF. And writing a grammar for each should not be too difficult, from which one gets a CF grammar for $L$.
Of course, one can prove directly that this representation of the language is indeed correct. But I wondered what is a more systematic, or at least analytic, way of finding it. That is what I am presenting below, for whoever is interested. It is actually how I found this answer, pretty trivial in retrospect.
Understanding how I obtained that result
Warning: this goes a bit beyond the question.
Yuval Filmus gave previously a strong hint to answer this question, and a similar
question was adressed previously. But I wondered whether this kind of problem can be adressed in a more systematic way, to prove that a language is CF, and to produce a grammar.
Thus, rather than just give a specific proof, I wish to analyze the example in details to
understand what should be the strategy for a whole family of similar
examples.
It is based on several facts:
While CF languages are not closed under complementation general,
many CF languages are also co-CF, i.e. have a CF complement. This in
particular the case for deterministic CF languages. Deterministic CF languages seem to show up often in exercises, though possibly a bit hidden, as is the case here.
CF languages are not closed under intersection, but they are
closed under union.
Properties defining a language, that appear as conjunctions, turn
into disjonction when considering complements (De Morgan's law). From
a language point of view, the complement of the intersection of two
languages is the union of the complement of each: $\overline{L_1\cap
L_2}=\overline{L_1}\cup\overline{L_2}$
CF languages are closed under intersection with regular sets, and
of course with union.
A few other set relations can be handy. For example we have
$L_1-L_2=L_1\cap\overline{L_2}$.
Last, but not least, all the closure properties are constructive, so that one may always hope to use them to extract the grammar from the CF-ness proof.
We could certainly build tools to do it for us. For example, a general CF parser (such as CYK) can be used to compute the grammar for the intersection of its language with any regular set.
We look at the example given: $$L=a^{\ast}b^{\ast}c^{\ast} - \{a^{n}
b^{n} c^{n} \mid n \geq 0 \}$$
and we analyze it in much details, so as to understand better the techniques that can be used.
We note that:
$$L=a^{\ast}b^{\ast}c^{\ast} - \{a^{n}
b^{n} c^{n} \mid n \geq 0 \} =a^{\ast}b^{\ast}c^{\ast}\cap\overline{\{a^{n}
b^{n} c^{n} \mid n \geq 0 \}}$$
Since $a^{\ast}b^{\ast}c^{\ast}$ is regular, $L$ is CF iff
$L_1=\overline{\{a^{n}
b^{n} c^{n} \mid n \geq 0 \}}$ is CF.
$$\begin{align}
\overline{L_1}&=\{a^{n}b^{n} c^{n} \mid n \geq 0 \}\\
&=\{a^{i}b^{j} c^{k} \mid i=j=k \geq 0 \}\\
&=\{a^{i}b^{j} c^{k} \mid i=j\wedge j=k \wedge i,j,k \geq 0 \}\\
&=\{a^{i}b^{j} c^{k} \mid i=j\wedge j=k\}\\
&=\{a^{i}b^{j} c^{k} \mid i=j\}\cap\{a^{i}b^{j} c^{k} \mid j=k\}
\end{align}
$$
The last condition does not really matter here, since exponents are
necessarily non-negative integers.
Thus
$$\begin{align}
L_1&=\overline{\{a^{i}b^{j} c^{k} \mid i=j\}\cap\{a^{i}b^{j} c^{k} \mid j=k\}}\\
&=\overline{\{a^{i}b^{j} c^{k} \mid i=j\}}\cup\overline{\{a^{i}b^{j}c^{k} \mid j=k\}}\\
\end{align}
$$
The two languages $M'=\{a^{i}b^{j} c^{k} \mid i=j\}$ et
$M''=\{a^{i}b^{j}c^{k} \mid j=k\}$ are obviously CF, as it is quite
easy to build a DPDA for each of them. Hence their complements are
also CF, and so is their union $L1$. So we conclude that $L$ is CF.
From this alone, we could extract a grammar for it, by mechanical
means. But this is not easy by hand, and we will go a bit further.
We will try to make the complements of $M'$ and $M''$ a bit more
explicit. It is not easy, since it does
include for each all the string such that $a$, $b$, and $c$ are not
seggregated in the right order. But we can always use the friendly
help of intersection with a regular set, precisely
$a^{\ast}b^{\ast}c^{\ast}$, that we discarded earlier, as not useful to prove the CF-ness of $L$. It comes back handily to simplify our work for building a grammar.
So we return to $L= a^{\ast}b^{\ast}c^{\ast}\cap L_1$
$$\begin{align}
L&= a^{\ast}b^{\ast}c^{\ast}\cap L_1\\
&=a^{\ast}b^{\ast}c^{\ast}\cap(\overline{\{a^{i}b^{j} c^{k} \mid
i=j\}}\cup\overline{\{a^{i}b^{j}c^{k} \mid j=k\}})\\
&=(a^{\ast}b^{\ast}c^{\ast}\cap\overline{\{a^{i}b^{j} c^{k}\mid i=j\}})
\cup (a^{\ast}b^{\ast}c^{\ast}\cap\overline{\{a^{i}b^{j} c^{k}\mid j=k\}})\\
&=\{a^{i}b^{j} c^{k} \mid i\neq j\}\cup \{a^{i}b^{j}c^{k} \mid j\neq k\}
\end{align}
$$
Building a CF grammar for these two languages id a standard, and not very hard, exercise. From that you get a grammar for the union of these two languages.
This is unlikely to be the only way to get such results, but it should
give some ideas to deal with such problems.