As David Carlisle says, rename your labels. This can easily be done using the Stream Editor, sed for example.
Let's say that you have one chapter file about Lions, and one about Zebras; in both chapter files you have used the labelling convention you described, something like the following:
lions.tex
\chapter{Lions}
\section{Intro}\label{sec:intro}
\section{Results}\label{sec:results}
Here's a reference to \ref{sec:intro} and \ref{sec:results}.
zerbras.tex
\chapter{Zebras}
\section{Intro}\label{sec:intro}
\section{Intro}\label{sec:intro}
\section{Results}\label{sec:results}
Here's a reference to \ref{sec:intro} and \ref{sec:results}.
You can use sed to search and replace each \label and \ref in each of the files so that all of your labels and references change appropriately
sed -i 's/\\\(label\|ref\){\([^}]*\)/\\\1{lions:\2/g' lions.tex
sed -i 's/\\\(label\|ref\){\([^}]*\)/\\\1{zebras:\2/g' zebras.tex
Now your files look like the following
lions.tex (new)
\chapter{Lions}
\section{Intro}\label{lions:sec:intro}
\section{Results}\label{lions:sec:results}
Here's a reference to \ref{lions:sec:intro} and \ref{lions:sec:results}.
zebras.tex (new)
\chapter{Zebras}
\section{Intro}\label{zebras:sec:intro}
\section{Intro}\label{zebras:sec:intro}
\section{Results}\label{zebras:sec:results}
Here's a reference to \ref{zebras:sec:intro} and \ref{zebras:sec:results}.
Understanding \\\(label\|ref\){\([^}]*\)/\\\1{lions:\2/g
The basic syntax I have used is s/old/new/g to substitute 'old' with 'new'. The g flag says to do it globally. Let's break the above expression down into parts:
\\\(label\|ref\) matches \label or \ref and stores the result into memory, to be used later as \1. Note that we need to use a \ to escape special characters
{\([^}]*\) matches the stuff inside {...}, but does so in a non-greedy way. It is very important for this regexp not to be greedy; if were greedy, then when operating upon the expression Here's a reference to \ref{sec:intro} and \ref{sec:results} it would match
sec:intro} and \ref{sec:results}
which is not what we intend!
\\\1{lions:\2 is the replacement text, using \1 and \2 as the match that has been stored into memory.
Additionally support cleveref
Cleveref uses \cref and \Cref.
sed -i 's/\\\(label\|[Cc]\?ref\){\([^}]*\)/\\\1{lion:\2/g'
Running this on all files in a directory can be useful and done easily by using *.tex as the file argument, which your shell (bash, etc...) will expand to all the files.
sec:intosec:<num>:within each file, then it is also easy to spot what each one relates to. – daleif Nov 09 '12 at 16:43chap3:sec:introthen LaTeX will work without problems but it will confuse any humans looking at the source file. – David Carlisle Nov 09 '12 at 16:52