Der grepBefehl 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 sedund 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 -qOption herumspielen sollte, aber es ist mir nicht gelungen.
sedSicherheit einen Exit-Status gibt, der hier einfach nicht das tut, was Sie brauchen. Wenn dersedBefehl 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,sedwird er mit einem Exit-Status ungleich 0 beendet. Der Exit-Status gibt nur an, ob essedgeschafft 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.