Câu trả lời:
Sử dụng tùy chọn dòng lệnh -v
hoặc --invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
hoặc là
grep --invert-match
Bạn cũng có thể làm điều tương tự bằng cách sử dụng find
:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
Thêm thông tin ở đây .
find
lệnh là giải pháp ngữ nghĩa nhất cho vấn đề XY này. Kết hợp ls
và grep
cho mục đích này có vẻ như hacky tốt nhất. Đây phải là câu trả lời được chấp nhận. (+1)
grep "subscription" | grep -v "spec"
-v
/--invert-match
sẽ không nhất thiết phải lật xem mã trả vềgrep
cho biết thực hiện thành công hay không, nhưng thay vào đó sẽ khớp với các dòng mà nếu không sẽ không khớp. Những người đang tìm cách đảo ngược mã trả về (nghĩa là thành công nếu tất cả các dòng không khớp với mẫu, thay vì ít nhất một) nên sử dụng! grep
. Điều này tìm thấy sử dụng trong các biểu thức điều kiện, ví dụ :if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.