Làm cách nào tôi có thể chặn đầu ra từ grep, để nó chỉ trả về trạng thái thoát?


57

Tôi có greplệnh. Tôi đang tìm kiếm một từ khóa từ một tập tin, nhưng tôi không muốn hiển thị trận đấu. Tôi chỉ muốn biết trạng thái thoát của grep.

Câu trả lời:


69

Bất kỳ phiên bản tuân thủ POSIX nàogrep đều có công tắc -qđể yên lặng:

-q
     Quiet. Nothing shall be written to the standard output, regardless
     of matching lines. Exit with zero status if an input line is selected.

Trong GNU grep (và có thể cả những người khác), bạn cũng có thể sử dụng các từ đồng nghĩa tùy chọn dài:

-q, --quiet, --silent     suppress all normal output

Thí dụ

Chuỗi tồn tại:

$ echo "here" | grep -q "here"
$ echo $?
0

Chuỗi không tồn tại:

$ echo "here" | grep -q "not here"
$ echo $?
1

6

Chỉ cần chuyển hướng đầu ra của grepđể /dev/null:

grep sample test.txt > /dev/null

echo $?

1
Điều này sẽ thất bại echo $?nếu greptrả về mã thoát khác không.
WinnieNicklaus

2

Bạn chỉ cần kết hợp grep -q <pattern>với kiểm tra ngay lập tức mã thoát cho quy trình cuối cùng để thoát ( $?).

Bạn có thể sử dụng điều này để xây dựng một lệnh như thế này, ví dụ:

uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac

Bạn có thể tùy ý chặn đầu ra từ STDERRnhư vậy:

grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac

Điều này sẽ in error: 2từ casetuyên bố (giả sử chúng tôi không có đặc quyền để đọc /etc/shadowhoặc tệp không tồn tại) nhưng thông báo lỗi từ grepsẽ được chuyển hướng đến /dev/nullvì vậy chúng tôi không bao giờ nhìn thấy nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.