Linux Metacharacters là gì và bạn sử dụng chúng như thế nào

Theo Wikipedia, một metacharacter là bất kỳ ký tự nào có ý nghĩa đặc biệt, chẳng hạn như dấu cara (^), ký hiệu đô la ($) hoặc dấu hoa thị (*).

Về Linux, có một số lượng hợp lý của các siêu ký tự này và ý nghĩa của chúng khác nhau tùy thuộc vào lệnh hoặc chương trình bạn đang chạy.

Ngưng đầy đủ như một Metacharacter (.)

Điểm dừng đầy khiêm tốn được sử dụng để tặng vị trí hiện tại khi chạy các lệnh như cd , find hoặc sh nhưng trong các ứng dụng như awk , grepsed nó được sử dụng để biểu thị bất kỳ ký tự nào.

Ví dụ, lệnh sau sẽ tìm tất cả các tệp mp3 trong thư mục hiện tại và bên dưới.

tìm thấy . -name * .mp3

Nếu bạn chạy lệnh đó trong thư mục làm việc hiện tại (pwd) thì có thể bạn sẽ nhận được kết quả trả về, giả sử bạn giữ các tệp mp3 trong một thư mục âm nhạc trong thư mục chính của bạn.

Bây giờ hãy nhìn vào lệnh này:

ps -ef | grep f..efox

Lệnh ps liệt kê tất cả các tiến trình đang chạy trên máy tính của bạn. Lệnh grep có các dòng đầu vào và tìm kiếm một mẫu.

Do đó lệnh ps -ef nhận được một danh sách các tiến trình đang chạy và đưa nó đến grep để tìm kiếm bất kỳ dòng nào trong danh sách có f..efox ở đâu. có thể có nghĩa là bất kỳ nhân vật nào.

Nếu bạn có firefox chạy, bạn sẽ nhận được một trận đấu. Tương tự như vậy, nếu bạn có một chương trình được gọi là fonefox hoặc freefox chạy chúng cũng sẽ được trả lại.

Dấu sao dưới dạng siêu ký tự (*)

Dấu sao là một metacharacter phổ biến hơn và được sử dụng để có nghĩa là 0 hoặc nhiều hơn khi tìm kiếm một mẫu.

Ví dụ:

tìm thấy . -name * .mp3

* .mp3 trả về kết quả phù hợp cho bất kỳ tên tệp nào kết thúc bằng .mp3. Tương tự, tôi có thể đã sử dụng dấu hoa thị với lệnh grep như sau:

ps -ef | grep F * efox

Điều đáng chú ý là điều này hơi khác một chút vì dấu sao có nghĩa là không hoặc nhiều hơn như vậy cũng như tìm firefox, facefox và fonefox nó cũng có thể tìm thấy flutefox, ferretfox và thậm chí chỉ là fefox.

Các carat như một Metacharacter (^)

Carat (^) được sử dụng để biểu thị sự bắt đầu của một dòng hoặc một chuỗi. Vậy nó được sử dụng như thế nào?

Lệnh ls được sử dụng để liệt kê tất cả các tệp trong một thư mục như sau:

ls

Nếu bạn muốn biết tất cả các tệp trong một thư mục bắt đầu bằng một chuỗi nhất định như "gnome" thì có thể sử dụng carat để chỉ định chuỗi đó.

Ví dụ:

ls | grep ^ gnome

Lưu ý rằng điều này chỉ liệt kê các tệp bắt đầu bằng gnome. Nếu bạn muốn các tệp có gnome trong tên tệp ở bất kỳ đâu thì bạn sẽ lại quay trở lại dấu hoa thị.

Trong ví dụ trên, ls trả về một danh sách tên tệp và chuyển danh sách đó tới grep được sử dụng để khớp mẫu. grep biết rằng biểu tượng carat nghĩa là tìm mọi thứ bắt đầu bằng các ký tự xuất hiện sau nó và trong trường hợp này, nó là một gnome.

Ký hiệu đô la như một Metacharacter ($)

Biểu tượng đồng đô la có thể có nhiều ý nghĩa như một metacharacter trong Linux.

Khi được sử dụng để phù hợp với các mẫu có nghĩa là đối diện với carat và biểu thị bất kỳ mẫu nào kết thúc bằng một chuỗi cụ thể.

Ví dụ:

ls | grep png $

Danh sách này liệt kê tất cả các tệp kết thúc bằng png.

Biểu tượng đồng đô la cũng được sử dụng để truy cập các biến môi trường bên trong bash shell.

Ví dụ:

chó xuất khẩu = molly
echo $ dog

Chó xuất dòng = molly tạo ra một biến môi trường có tên là dog và đặt giá trị của nó thành molly. Để truy cập vào biến môi trường, ký hiệu $ được sử dụng. Với biểu tượng $, câu lệnh echo $ echo hiển thị molly nhưng không có nó, câu lệnh echo dog chỉ hiển thị chú chó.

Thoát Metacharacters

Đôi khi bạn không muốn metacharacter có ý nghĩa đặc biệt. Điều gì nếu bạn có một tập tin gọi là f.refox và một tập tin gọi là firefox.

Bây giờ hãy xem lệnh sau:

ls | grep f.refox

Bạn nghĩ gì được trả lại? Cả f.refox và firefox đều được trả về vì cả hai đều khớp với mẫu.

Để chỉ trả về f.refox, bạn cần phải thoát toàn bộ điểm dừng để thực sự có nghĩa là một điểm dừng đầy đủ như sau:

ls | grep f \\. refox

Metacharacters phổ biến và ý nghĩa của chúng

Danh sách Linux Metacharacters
Tính cách Ý nghĩa
. Bất kỳ nhân vật nào
* Không có nhiều ký tự trở lên
^ Kết hợp bất kỳ dòng hoặc chuỗi nào bắt đầu bằng mẫu (ví dụ ^ gnome)
$ Kết hợp bất kỳ dòng hoặc chuỗi nào kết thúc với một mẫu (ví dụ gnome $)
\ Thoát ký tự tiếp theo để xóa ý nghĩa đặc biệt của nó
[] Kết hợp một danh sách hoặc phạm vi (tức là ["abc", "def"] hoặc [1..9]
+ Đối sánh một hoặc nhiều từ trước (tức là grep a +)
? Khớp với số không hoặc một trước