Làm thế nào để tìm một không gian trong một văn bản. sử dụng grep?


13

Làm thế nào để grep một không gian trong văn bản?

cat a.txt| grep ' '

hoặc là

cat a.txt| grep '\s '

7
Sử dụng miễn phí cattrong cả hai trường hợp. Cái đầu tiên có thể được viết grep ' ' a.txt, cái thứ hai thay đổi tương tự.
MadHatter

1
Lưu ý rằng \scũng phù hợp với tab, trả lại, tab dọc, nguồn cấp mẫu và, về mặt kỹ thuật, dòng mới. Nếu bạn muốn chỉ khớp không gian và tab, hãy sử dụng [[:blank:]]hoặc [ \t].
Tạm dừng cho đến khi có thông báo mới.

bằng cách sử dụng gnu grep, bạn có thể giới hạn số lượng trận đấu ( -mtùy chọn) ở một ...
sendmoreinfo

Điều này đơn giản hơn egrep "\ s" a.txt

Câu trả lời:


6

Nếu bạn muốn grep chỉ một khoảng trống khi bạn đặt câu hỏi, bạn sẽ sử dụng một cái gì đó như:

grep -e '^\s[^\s]' -e '[^\s]\s$' -e '[^\s]\s[^\s]' a.txt

hoặc cho các biến thể POSIX:

grep -e '^ [^ ]' -e '[^ ] $' -e '[^ ] [^ ]' a.txt

hoặc biến thể POSIX ít đọc hơn:

grep '\(^\|[^ ]\)\ \([^ ]\|$)' a.txt

Giả sử bạn muốn loại trừ các dòng có nhiều hơn một không gian liền kề, điều này rõ ràng đòi hỏi phải có một khoảng trắng, không có trước một khoảng trắng và không có khoảng trắng theo sau.

Ngoài ra, điều đáng chú ý là không phải tất cả các phiên bản của grep đều hỗ trợ các điều khiển biểu thức chính quy '\ s'.


1
Bạn có thể bỏ qua tất cả các dấu gạch chéo ngược từ ví dụ trước và cải thiện khả năng đọc bằng cách sử dụng -Etùy chọn chỉ định POSIX cho phép biểu thức chính mở rộng. grep -E '(^|[^ ]) ([^ ]|$)' a.txtTrong mọi trường hợp, dấu gạch chéo ngược trước dấu cách không cần thiết và thiếu một dấu ngoặc trước dấu ngoặc đơn đóng cuối cùng. Ngoài ra, đối với các phiên bản grephiểu điều đó \s, bạn có thể rút ngắn biểu thức cho không phải khoảng trắng [^\s]thành\S
Tạm dừng cho đến khi có thông báo mới.

Tuy nhiên, điều này cũng hoạt động, [[: blank:]]
Emax

4

Tôi nghĩ rằng tôi đã tìm thấy nó:

grep  "\+[[:space:]]\+" a.xml

1

Biến thể 2 sẽ chỉ tìm thấy hai khoảng trắng. Nếu bạn sử dụng '\s'thay thế, cả hai biến thể sẽ hoạt động.

Bạn có thể dễ dàng tự kiểm tra điều này, vậy câu hỏi thực sự của bạn là gì?


1
Tại sao chỉ tìm thấy hai không gian? Tôi nghĩ rằng nó phù hợp với bất kỳ không gian.
cuonglm

1
@Gnouc: Biến thể 2 khi anh ta viết nó '\s 'sẽ khớp với ít nhất hai khoảng trắng liên tiếp, bởi vì anh ta đã thêm một ký tự khoảng trắng sau nhóm nhân vật \s.
Sven

Bạn nói đúng, tôi không thấy không gian sau \s, lỗi của tôi.
cuonglm
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.