Der grep
Befehl gibt einen Exit-Status aus:
$echo "foo.bar" | grep -o foo
foo
$echo $?
0
$echo "foo.bar" | grep -o pop
$echo $?
1
Aber ich muss verwenden sed
und mir wurde klar, dass es keinen Exit-Status hat:
$echo "foo.bar" | sed 's/bar.*$//'
foo.
$echo $?
0
$echo "foo.bar" | sed 's/pop.*$//'
foo.bar
$echo $?
0
Ich weiß, dass ich mit der -q
Option herumspielen sollte, aber es ist mir nicht gelungen.
sed
Sicherheit einen Exit-Status gibt, der hier einfach nicht das tut, was Sie brauchen. Wenn dersed
Befehl fehlschlägt, z. B. wenn Sie versuchen, ihn für eine Datei auszuführen, auf die Sie keinen Schreibzugriff haben oder die nicht vorhanden ist,sed
wird er mit einem Exit-Status ungleich 0 beendet. Der Exit-Status gibt nur an, ob essed
geschafft hat, das zu tun, was Sie ihm gesagt haben, und ob esecho "foo.bar" | sed 's/pop.*$//'
korrekt ausgeführt wurde. Es wurden alle Zeilen mit gelöschtpop
. Dass es keine solchen Zeilen gab, ist irrelevant, der Befehl funktionierte immer noch.