Il grep
comando fornisce uno stato di uscita:
$echo "foo.bar" | grep -o foo
foo
$echo $?
0
$echo "foo.bar" | grep -o pop
$echo $?
1
Ma devo usare sed
e mi sono reso conto che non ha uno stato di uscita:
$echo "foo.bar" | sed 's/bar.*$//'
foo.
$echo $?
0
$echo "foo.bar" | sed 's/pop.*$//'
foo.bar
$echo $?
0
So che dovrei giocare con l' -q
opzione, ma non ci sono riuscito.
sed
sicuramente ha uno stato di uscita, semplicemente non fa quello che ti serve qui. Se ilsed
comando non riesce, ad esempio, se si tenta di eseguirlo su un file per il quale non si ha accesso in scrittura o su uno inesistente, sised
uscirà con uno stato di uscita diverso da 0. Lo stato di uscita indica semplicemente sesed
sei riuscito a fare ciò che gli hai detto di fare ed èecho "foo.bar" | sed 's/pop.*$//'
stato eseguito correttamente. Ha eliminato tutte le righe conpop
. Che non esistessero tali righe è irrilevante, il comando ha ancora funzionato.