come ha commentato @cnicutar, il codice di ritorno di un comando indica se il comando è stato eseguito correttamente. non ha nulla a che fare con la logica che hai implementato nei codici/script.
quindi se hai:
echo "foo"|sed '/bar/ s/a/b/'
 sed restituirà 0 ma se scrivi alcuni errori di sintassi/espressione o l'input/file non esiste, sed non può eseguire la tua richiesta, sed restituirà 1.
soluzione alternativa
 questa in realtà non è una soluzione alternativa . sed ha q comando:(dalla pagina man):
 q [exit-code]
 qui puoi definire il codice di uscita come desideri. Ad esempio '/foo/!{q100}; {s/f/b/}' uscirà con il codice 100 se foo non è presente, altrimenti esegui la sostituzione f->be esci con il codice 0.
Caso corrispondente:
kent$  echo "foo" | sed  '/foo/!{q100}; {s/f/b/}'
boo
kent$  echo $?
0
Caso senza corrispondenza:
kent$ echo "trash" | sed  '/foo/!{q100}; {s/f/b/}'
trash
kent$ echo $?
100
Spero che questo risponda alla tua domanda.
modifica
 Devo aggiungere che l'esempio sopra è solo per l'elaborazione di una riga. Non conosco la tua esatta esigenza. quando vuoi ottenere exit 1 . una riga senza corrispondenza o l'intero file. Se l'intero file non corrisponde a maiuscole e minuscole, puoi considerare awk o persino eseguire un grep prima dell'elaborazione del testo...
Questo potrebbe funzionare per te (GNU sed):
sed '/search-string/{s//replacement-string/;h};${x;/./{x;q0};x;q1}' file
 Se search-string viene trovato verrà sostituito con replacement-string e alla fine del file sed uscirà con 0 codice di ritorno. Se non avviene alcuna sostituzione, il codice di ritorno sarà 1 . 
Una spiegazione più dettagliata:
In sed l'utente ha a disposizione due registri:il pattern space (PS) in cui viene caricata la riga corrente (meno il linefeed) e un registro di riserva chiamato hold space (HS) che inizialmente è vuoto.
L'idea generale è di usare l'HS come indicatore per indicare se è avvenuta una sostituzione. Se l'HS è ancora vuoto alla fine del file, non sono state apportate modifiche, altrimenti si sono verificate modifiche.
 Il comando /search-string/ corrisponde a search-string con tutto ciò che è nel PS e se si trova che contiene il search-string vengono eseguiti i comandi tra le seguenti parentesi graffe.
 Innanzitutto la sostituzione s//replacement-string/ (sed usa l'ultima espressione regolare, cioè il search-string , se il lato sinistro è vuoto, quindi s//replacement-string è uguale a s/search-string/replacement-string/ ) e successivamente il h Il comando crea una copia del PS e lo inserisce nell'HS.
 Il comando sed $ viene utilizzato per riconoscere l'ultima riga di un file e quindi si verifica quanto segue.
 Prima il x Il comando scambia i due registri, quindi HS diventa PS e PS diventa HS.
 Quindi il PS viene cercato per qualsiasi carattere /./ (. significa corrispondere a qualsiasi carattere) ricorda che HS (ora PS) era inizialmente vuoto fino a quando non è avvenuta una sostituzione. Se la condizione è vera il x viene nuovamente eseguito seguito da q0 comando che termina tutta l'elaborazione sed e imposta il codice di ritorno su 0 . Altrimenti x viene eseguito il comando e il codice di ritorno è impostato su 1 .
 N.B. sebbene il q chiude l'elaborazione di sed non impedisce al PS di essere riassemblato da sed e stampato come di consueto.
Un'altra alternativa:
sed '/search-string/!ba;s//replacement-string/;h;:a;$!b;p;x;/./Q;Q1' file
oppure:
sed '/search-string/,${s//replacement-string/;b};$q1' file
Queste risposte sono fin troppo complicate. Cosa c'è di sbagliato nello scrivere un po' di script di shell che usa grep per capire se la cosa che vuoi sostituire è lì e poi usare sed per sostituirla?
grep -q $TARGET_STRING $file
if [ $? -eq 0 ]
then
    echo "$file contains the old site"
    sed -e "s|${TARGET_STRING}|${NEW_STRING}|g" ....
fi