2009-10-17 5 views
16

Cố gắngphù hợp với một dòng với một dấu sao đen "*" trong grep

$ echo "$STRING" | egrep "(\*)" 

và cũng

$ echo "$STRING" | egrep '(\*)' 

và vô số các biến thể khác. Tôi chỉ muốn phù hợp với một dòng có chứa một dấu hoa thị ở bất cứ đâu trong dòng.

+1

Tôi thường chỉ tiếp tục thêm dấu gạch chéo cho đến khi tôi nhận được những gì tôi muốn. :) –

+2

Cả hai ví dụ của bạn đều phù hợp với tôi (và cũng làm việc với các dấu ngoặc đơn đã bị xóa). –

Trả lời

16

Hãy thử một lớp nhân vật thay vì

echo "$STRING" | egrep '[*]' 
+0

Trên Windows với GnuWin32, bạn có thể sử dụng 'grep [*] file.txt'. –

+0

... ngoại trừ nếu bạn có tệp có tên là '*' trong thư mục nơi bạn chạy tệp đó. Bài học (không phải đặc biệt từ ví dụ này, nhưng nói chung) là luôn luôn trích dẫn các biểu thức chính quy của bạn, bất kể tầm thường. – tripleee

1

Dưới đây là một cách để phù hợp với một dấu sao đen:

$ echo "*" | grep "[*]" 
* 
$ echo "*" | egrep "[*]" 
* 
$ echo "asfd" | egrep "[*]" 
$ echo "asfd" | grep "[*]" 
$ 

Bọc một biểu thức trong ngoặc đơn thường cho phép bạn chụp một nhân vật đặc biệt duy nhất một cách dễ dàng; điều này cũng sẽ làm việc cho một khung bên phải hoặc một dấu nối, ví dụ.

Hãy cẩn thận khi đây không phải là trong một nhóm khung:

$ echo "hi" | egrep "*" 
hi 
$ echo "hi" | grep "*" 
$ 
+1

Ví dụ của bạn cho thấy lý do tại sao tôi thấy hành vi này gây khó chịu. Nếu bạn muốn thực hiện tìm kiếm chuỗi ký tự bằng grep, chỉ cần đặt nó trong dấu ngoặc kép. Tại sao tôi sẽ ** bao giờ muốn grep cho mọi thứ? unix gọi rằng chương trình 'mèo' ;-) Tôi ghét các lực lượng egrep bạn để khung ký tự regex ngay cả khi họ đang ở trong dấu ngoặc kép. Kết thúc của rant. Cảm ơn! – DaveParillo

+2

@DaveParillo: cả grep lẫn egrep đều không biết liệu mẫu bạn đã truyền có được trích dẫn hay không, vì dấu ngoặc kép được diễn giải bởi trình bao trước khi [e] grep được khởi chạy. Sự khác biệt là do grep và egrep phản ứng như thế nào khi mẫu bắt đầu bằng "*", có dạng sai về mặt kỹ thuật ("*" là hậu tố). Hãy thử 'grep '. *" 'Và bạn sẽ thấy nó khớp với mọi thứ. Nếu bạn muốn tìm kiếm theo nghĩa đen (không phải regex), hãy sử dụng 'fgrep' để thay thế. –

5

Sử dụng:

grep "*" file.txt 

hoặc

cat file.txt | grep "*" 
+0

vì bạn có thể làm cái đầu tiên, cái thứ hai với con mèo là không cần thiết. – ghostdog74

+0

Tôi nghe ya. Nhiều người dường như thích sử dụng con mèo để truyền một tệp vào tất cả các loại chương trình mặc dù nó thường không cần thiết. Tôi chỉ nghĩ rằng tôi sẽ bao gồm nó để làm cho ví dụ trông quen thuộc hơn. – DaveParillo

+0

Cả hai đều không hoạt động dưới GNUWin32 trên các cửa sổ. – Itsme2003

1
echo "$STRING" | fgrep '*' 

fgrep được sử dụng để phù hợp với đặc biệt nhân vật.