The grep
perintah memberikan keluar status keluar:
$echo "foo.bar" | grep -o foo
foo
$echo $?
0
$echo "foo.bar" | grep -o pop
$echo $?
1
Tetapi saya perlu menggunakan sed
dan saya menyadari bahwa itu tidak memiliki status keluar:
$echo "foo.bar" | sed 's/bar.*$//'
foo.
$echo $?
0
$echo "foo.bar" | sed 's/pop.*$//'
foo.bar
$echo $?
0
Saya tahu bahwa saya harus bermain-main dengan -q
opsi itu, tetapi saya belum berhasil.
command-line
sed
Josef Klimuk
sumber
sumber
sed
sebagian besar memang memiliki status keluar, hanya saja tidak melakukan apa yang Anda butuhkan di sini. Jikased
perintah gagal, misalnya, jika Anda mencoba menjalankannya pada file yang Anda tidak memiliki akses tulis atau yang tidak ada,sed
akan keluar dengan status keluar non-0. Status keluar hanya menunjukkan apakahsed
berhasil melakukan apa yang Andaecho "foo.bar" | sed 's/pop.*$//'
perintahkan , dan dieksekusi dengan benar. Itu menghapus semua baris denganpop
. Bahwa tidak ada garis seperti itu tidak relevan, perintah masih berfungsi.Jawaban:
Anda dapat menggunakan q n untuk keluar dengan status keluar n - tetapi untuk membuatnya berguna, Anda juga perlu menggunakan beberapa Percabangan dan Kontrol Aliran :
Mungkin yang terbaik adalah memilih nilai untuk n yang berbeda dari salah satu nilai status keluar standar:
Jadi misalnya
sedangkan
Jika Anda ingin menghilangkan pencetakan standar dari ruang pola, kemudian ganti
q
denganQ
(perhatikan bahwa ituQ
adalah ekstensi GNU).sumber
Berikut cara mencari regex dengan sed, dan menyorot kecocokan , atau mengembalikan kode keluar (5) jika tidak ada kecocokan yang ditemukan:
Ini adalah input.txt:
Inilah fungsi saya untuk Mencetak semua + Sorotan yang cocok + Mengembalikan kode keluar:
Ketika tidak ada yang cocok, itu akan mengembalikan kode keluar (5). Anda dapat menggunakannya dengan cat dan pipa | demikian juga:
* Tidak ditemukan kecocokan *
Terima kasih kepada https://unix.stackexchange.com/a/405725/43233 - Saya menggunakannya + opsi berhenti sementara.
sumber