Berikut cara mencari regex dengan sed, dan menyorot kecocokan , atau mengembalikan kode keluar (5) jika tidak ada kecocokan yang ditemukan:
Ini adalah input.txt:
hello there
my dear old friend
a lot of things
we'll pass along the end
Inilah fungsi saya untuk Mencetak semua + Sorotan yang cocok + Mengembalikan kode keluar:
highlight()
{
pattern=$1
shift
sed '/'"${pattern}"'/,${s//\x1b[32m&\x1b[0m/g;b};$q5' "$@"
}
$ sorot "lo \ | end" input.txt || echo -e "\ n * Tidak ditemukan kecocokan *"
hel lo ada
fri tersayang saya mengakhiri
sebuah lo t hal
kita akan melewati sebuah lo ng akhir
Ketika tidak ada yang cocok, itu akan mengembalikan kode keluar (5). Anda dapat menggunakannya dengan cat dan pipa | demikian juga:
$ cat input.txt | sorot "hot \ | dan" || echo -e "\ n * Tidak ditemukan kecocokan *"
Halo
, teman lama saya yang terkasih,
banyak hal yang
akan kami sampaikan sampai akhir
* Tidak ditemukan kecocokan *
Terima kasih kepada https://unix.stackexchange.com/a/405725/43233 - Saya menggunakannya + opsi berhenti sementara.
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.