Câu trả lời của tôi là một biến thể của câu trả lời điển hình cho việc tìm kiếm "foobar" trong ps
danh sách. Đối số của tôi "-A" "ps"
là dễ mang theo hơn "aux"
, tôi tin, nhưng sự thay đổi này không liên quan đến câu trả lời. Câu trả lời điển hình như thế này:
$ ps -A -ww | grep [f]oobar
Thay vào đó tôi sử dụng mẫu này:
$ ps -A -ww | grep [^]]foobar
Ưu điểm chính là việc viết các tập lệnh dựa trên các mẫu này dễ dàng hơn vì bạn chỉ cần nối một chuỗi tĩnh [^]]
với bất kỳ mẫu nào bạn đang tìm kiếm. Bạn không cần phải loại bỏ chữ cái đầu tiên của chuỗi sau đó chèn nó vào giữa các dấu ngoặc vuông và sau đó nối lại chuỗi đó lại với nhau. Khi viết kịch bản trong shell, đơn giản hơn là chỉ cần dán [^]]
trước mẫu mà bạn đang tìm kiếm. Cắt chuỗi trong Bash là một điều xấu xí, vì vậy biến thể của tôi tránh điều đó. Biến thể này cho biết hiển thị các dòng trong đó mẫu khớp với KHÔNG CÓ khung vuông vuông bên phải hàng đầu]. Vì mẫu tìm kiếm để loại trừ một khung vuông thực sự thêm khung vuông vào mẫu nên nó sẽ không bao giờ khớp với chính nó.
Vì vậy, bạn có thể viết một psgrep
lệnh di động như sau. Ở đây, tôi thực hiện một số khoản trợ cấp cho sự khác biệt giữa Linux, OS X BSD và các loại khác. Điều này thêm các tiêu đề cột từ ps
, cung cấp một tùy chỉnh nhiều hơnps
định dạng phù hợp với nhu cầu của tôi hơn và hiển thị các quy trình liệt kê thêm, rộng hơn để không có đối số dòng lệnh nào bị bỏ lỡ. Vâng, hầu hết không được bỏ lỡ. Java là Java, nó thường thực hiện mọi thứ theo cách tồi tệ nhất có thể, do đó, một số dịch vụ java sẽ chạy qua độ dài tối đa được phép của các đối số mà bảng quy trình sẽ theo dõi. Tôi tin rằng đây là 1024 ký tự. Độ dài đơn lệnh cho phép bắt đầu một quy trình dài hơn nhiều, nhưng bảng quy trình nhân không bận tâm theo dõi bất cứ thứ gì có độ dài trên 1K. Khi lệnh được bắt đầu, tên lệnh và danh sách đối số không cần thiết, vì vậy những gì được lưu trữ trong bảng quy trình chỉ là thông tin.
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour
.