Dưới đây là cách tìm kiếm regex với sed và tô sáng các kết quả khớp hoặc trả về mã thoát (5) nếu không tìm thấy kết quả khớp:
Đây là input.txt:
hello there
my dear old friend
a lot of things
we'll pass along the end
Đây là chức năng của tôi để In tất cả + Đánh dấu các trận đấu + Trả về mã thoát:
highlight()
{
pattern=$1
shift
sed '/'"${pattern}"'/,${s//\x1b[32m&\x1b[0m/g;b};$q5' "$@"
}
$ tô sáng "lo \ | end" input.txt || echo -e "\ n * Không tìm thấy kết quả phù hợp *"
hel lo there
my old old fri end
a lo t of thing will will
pass a lo ng the end
Khi không có kết quả khớp, nó sẽ trả về mã thoát (5). Bạn có thể sử dụng nó với mèo và ống | cũng:
$ cat input.txt | tô sáng "nóng \ | và" || echo -e "\ n * Không tìm thấy kết quả phù hợp *"
xin chào,
người bạn cũ thân yêu của tôi,
rất nhiều điều
chúng ta sẽ vượt qua
* Không tìm thấy kết quả phù hợp *
Cảm ơn https://unix.stackexchange.com/a/405725/43233 - Tôi đang sử dụng tùy chọn này + sed thoát.
sed
hầu hết chắc chắn có trạng thái thoát, nó chỉ không làm những gì bạn cần ở đây. Nếused
lệnh thất bại, ví dụ, nếu bạn cố gắng chạy nó trên một tập tin bạn không có quyền ghi vào hoặc một trong đó không tồn tại,sed
sẽ thoát ra với một trạng thái thoát phi-0. Trạng thái thoát chỉ cho biết liệu cósed
được quản lý để thực hiện những gì bạn đã nói hay không vàecho "foo.bar" | sed 's/pop.*$//'
được thực hiện chính xác. Nó xóa tất cả các dòng vớipop
. Rằng không có dòng nào là không liên quan, lệnh vẫn hoạt động.