Tìm kiếm đệ quy không hoạt động cho grep trên solaris


20

Trên máy chủ Solaris của chúng tôi, tôi thấy rằng grep -rnó không hoạt động, đó là cách thông thường mà tôi sử dụng grep. Dường như egrepcó hành vi tương tự.

Cho rằng tôi không có quyền kiểm soát máy, có cách nào để grepthực hiện tìm kiếm đệ quy không? Hoặc tôi cần phải ống đầu ra của findthành grep?


1
Bạn đang sử dụng bản phát hành Solaris nào?
jlliagre

Câu trả lời:


4

Tôi không quen thuộc với Solaris, nhưng nếu bạn chuyển từ GNU / linux sang Solaris, bạn sẽ thấy hầu hết các lệnh sẽ hoạt động hơi khác nhau. Phiên bản GNU của các công cụ Unix có các tính năng bổ sung bị thiếu trong các Unix "độc quyền".

Bạn có thể tải xuống GNU grep (s) tại đây sau đó biên dịch và cài đặt.

Nếu bạn có quyền truy cập root, bạn có thể muốn chạy configure --prefix = / usr / local sao cho các tiện ích cài đặt vào / usr / local

Nếu bạn không có quyền truy cập root, bạn có thể muốn chạy configure --prefix = $ {HOME} sao cho các tiện ích cài đặt vào thư mục chính của bạn


--prefix=${HOME}}/.localcó lẽ nên khuyên hơn ... không cần phải làm lộn xộn thư mục nhà sharelibcác thư mục
jpaugh

1
Một người đàn ông bừa bộn là một người đàn ông khác được tổ chức
bsd

Không còn nghi ngờ gì nữa! Thành thật mà nói, tôi đang bảo vệ chống lại ngày nghỉ khi tôi nói, " share? Đó phải là một thư mục rác!" rm -rfĐừng!
jpaugh

31

Nếu bạn muốn sử dụng find, đây sẽ là cách nhanh nhất:

find . -type f -exec grep pattern {} +

Tuy nhiên, Gnu grep rất có thể đã được cài đặt trên máy của bạn.

Nó là một phần của cài đặt mặc định trên Solaris 11 in /usr/gnu/bin/grep. Tương tự cho Solaris 10 nơi bạn tìm thấy nó /usr/sfw/bin/ggrep. Trên các bản phát hành cũ hơn, nó có thể đã được cài đặt từ sunfreeware hoặc các kho lưu trữ khác, kiểm tra /usr/local/bin/grep/opt/csw/bin/grepcho các vị trí phổ biến.


Bạn cũng có thể sử dụng -nametùy chọn với find.
buồn ngủ ngày

@saddyweasel -namesẽ không tìm kiếm bên trong các tệp mà chỉ tìm kiếm các tên tệp không phải là những gì OP yêu cầu.
jlliagre

6

Sử dụng ggrep thay thế nếu nó được cài đặt.

Ví dụ: Tìm kiếm "mysearch chuỗi" từ thư mục hiện tại xuống tất cả các thư mục con ( -R) và hiển thị tên tệp và đường dẫn cho khớp ( -H) và bỏ qua các tệp nhị phân ( -I). Đừng quên *phần cuối của lệnh.

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

ggrep được đặt trong /usr/sfw/bin Bạn có thể thêm nó vào hồ sơ của mình bằng lệnh XUẤT để bạn có thể gọi trực tiếp từ dòng lệnh.

PATH=$PATH:/usr/sfw/bin
export PATH

Phiên bản Solaris: SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise


1
Ít nhất là trên hệ thống của tôi, ggrepthực sự là GNU grep. Cảm ơn!
jpaugh

3

Tải xuống acktập lệnh perl độc lập từ http://betterthangrep.com/ , đặt tập lệnh vào $HOME/binvà tìm hiểu cách sử dụng tập lệnh thay thế. Tôi thấy nó, như được quảng cáo, tốt hơn grep cho nhiều mục đích sử dụng trong công việc phát triển hàng ngày của tôi.


3

Solaris grep không có -rtùy chọn.

Bạn có thể sử dụng lệnh sau.

find . -type f | xargs grep 'sometext'

2
Bạn không cần "kiểm soát hệ thống" để biên dịch GNU grep và cài đặt nó ở đâu đó trong thư mục chính của bạn.
Keith Thompson

@KeithThndry nhờ chỉ ra. Tôi đã sửa câu trả lời của tôi.
Sachin Divekar

Điều này rất hữu ích để tìm tất cả các tệp khớp với mẫu tên và hiển thị kết quả với tệp. ví dụ find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse

1

Có, bạn sẽ cần grep GNU. Cá nhân tôi không bỏ lỡ cờ "-r" vì bạn có thể làm tương tự với sự kết hợp findgrepnhưng điều này nhắc nhở rằng có các công cụ GNU có sẵn trên hộp Solaris của bạn là điều tôi sẽ xem xét thực tiễn tốt nhất. Vì vậy, ở đây chúng tôi đi:

Tôi sẽ không tải về mã nguồn từ nhiều nơi khác nhau trên Internet và sau đó tự xây dựng. Đó là điều không cần thiết. Nếu bạn chỉ muốn Solaris của bạn có sẵn các công cụ GNU điển hình thì hãy làm như sau:

Nếu bạn đang ở trên Solaris 10, bạn nên lấy Đĩa đồng hành Solaris 10. Điều này từng được phân phối bởi Sun nhưng bây giờ nó sống ở đây . Cá nhân tôi sẽ luôn luôn cài đặt nội dung của đĩa này hoặc ít nhất là các phần GNU quan trọng nhất. Biến nó thành một phần của JumpStart (hoặc bất cứ thứ gì bạn sử dụng) cho các máy chủ mới trong tổ chức của bạn!

Nếu bạn đang ở trên Solaris 11 thì cuộc sống đơn giản hơn rất nhiều. Các công cụ GNU thường được cài đặt theo mặc định nhưng không phải tất cả chúng đều được truyền bá vào các vùng cục bộ. IFS, hệ thống đóng gói trên Solaris 11, giúp cuộc sống của bạn dễ dàng hơn rất nhiều vì vậy bạn thực sự nên chuyển sang Solaris 11 (rất nhiều lý do khác nữa). Danh sách các gói mà bạn nên xem xét luôn có sẵn cho bất kỳ khu vực nào là:

pkg: // solaris / archiver / gnu-tar
pkg: // solaris / developer / gnu-binutils
pkg: // solaris / chẩn đoán / đầu
pkg: // solaris / file / gnu-coreutils
pkg: // solaris / file / gnu-findutils
pkg: // solaris / text / gawk
pkg: // solaris / text / gnu-diffutils
pkg: // solaris / văn bản / gnu-grep
pkg: // solaris / văn bản / gnu-sed

và nếu bạn sử dụng máy chủ cho mục đích phát triển / xây dựng, bạn có thể muốn thêm:

pkg: // solaris / developer / build / gnu-make
pkg: // solaris / developer / build / make
pkg: // solaris / developer / gcc-45
pkg: // solaris / system / title
pkg: // solaris / developer / build / autoconf
pkg: // solaris / developer / build / automake-110

Cá nhân tôi sẽ biến phần trên (có khả năng ít hơn các công cụ dev) thành phần cài đặt mặc định của công ty tôi cho các máy chủ / vùng mới. Các sysadins Solaris thường khăng khăng khác với thế giới Linux nhưng thực sự không cần thiết. Chỉ cần làm điều đó và làm cho nó một phần của cài đặt mặc định của bạn. Bạn sẽ không hối tiếc.


Tôi không chắc liệu bạn có đọc phần tôi nói không 'vì tôi không có quyền kiểm soát máy ...' Tôi chắc chắn đây là thông tin hữu ích cho ai đó, nhưng hầu như không phải là câu trả lời cho câu hỏi mà tôi đã hỏi .
Eric Wilson

Đây là thông tin cho sysadmin của bạn. Anh ấy đã đưa cho bạn một cỗ máy làm tê liệt IMHO. Những thứ này nên được cài đặt theo mặc định. Nhưng vâng, bạn đã đúng, thông tin có lẽ chỉ dành cho những người khác đến nơi này và đọc câu hỏi của bạn. Hôm nay bạn thiếu GNU grep, ngày mai bạn sẽ thiếu GNU tar, v.v. Bạn chưa biết điều đó. :-)
peterh
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.