Tôi sẽ bắt đầu bằng cách nói rằng tôi nghĩ vấn đề này hơi ngây thơ hơn âm thanh.
Những gì tôi cần làm: kiểm tra một thư mục trong biến môi trường PATH. Nó có thể là lúc bắt đầu hoặc một nơi nào đó sau. Tôi chỉ cần xác minh rằng thư mục đó là ở đó.
Ví dụ về vấn đề của tôi - hãy sử dụng /opt/gnome
.
SCENARIO 1: thư mục không nằm ở đầu PATH
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Lưu ý rằng grep cần phải đủ cụ thể để nó không bắt được /var/opt/gnome
. Do đó đại tràng.
SCENARIO 2: thư mục nằm ở đầu PATH.
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
Đây là vấn đề của tôi - tôi cần tìm kiếm dấu hai chấm hoặc bắt đầu với thư mục này. Những gì tôi muốn làm là một trong hai biểu thức khung này:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
NHƯNG [^
và [:
có ý nghĩa riêng của họ. Do đó, hai lệnh trên không hoạt động.
Có cách nào tôi có thể grep cho hai kịch bản này trong một lệnh không?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
hoặc/opt/gnome$
, bạn sẽ tìm thấy/opt/gnome-foo
hoặc/opt/gnome/bar
.