Unix / Linux - Regular Expressions with SED

Xin chào các pháp sư dòng lệnh tương lai! Hôm nay, chúng ta sẽ khám phá thế giới kỳ diệu của các biểu thức chính quy (regex) và lệnh mạnh mẽ SED trong Unix/Linux. Hãy chuẩn bị vì chúng ta sắp bắt đầu một cuộc phiêu lưu đầy cảm hứng sẽ thay đổi cách bạn manipulates văn bản!

Unix / Linux - Regular Expressions

Gọi lệnh sed

Hãy bắt đầu với những điều cơ bản. SED, viết tắt của "Stream Editor", là một công cụ xử lý văn bản mạnh mẽ. Để sử dụng nó, chúng ta chỉ cần gõ "sed" tiếp theo là các lệnh của mình. Nó giống như gọi một pháp sư manipulates văn bản!

sed 'command' filename

Ví dụ:

sed 's/hello/bonjour/' greetings.txt

Lệnh này thay thế "hello" bằng "bonjour" trong file greetings.txt. Đơn giản phải không?

Cú pháp chung của sed

Cú pháp chung của sed giống như một lời chú thuật:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Đừng lo nếu điều này trông có vẻ đáng sợ. Chúng ta sẽ phân tích nó từng phần, như giải một puzzle vui vẻ!

Xóa tất cả các dòng với sed

Muốn làm biến mất toàn bộ văn bản trong một file? Sed có thể làm được! Dưới đây là cách thực hiện:

sed 'd' filename

Lệnh này xóa tất cả các dòng trong file. Nó giống như sử dụng một cục tẩy trên sổ tay kỹ thuật số của bạn!

Địa chỉ trong sed

Địa chỉ trong sed giống như tọa độ GPS cho văn bản của bạn. Nó chỉ cho sed biết nơi thực hiện phép thuật. Dưới đây là một số ví dụ:

sed '2d' file.txt  # Xóa dòng thứ 2
sed '/pattern/d' file.txt  # Xóa các dòng chứa 'pattern'

Phạm vi địa chỉ trong sed

Đôi khi, chúng ta muốn thực hiện phép thuật trên một phạm vi các dòng. Dưới đây là cách thực hiện:

sed '2,5d' file.txt  # Xóa các dòng từ 2 đến 5
sed '2,$d' file.txt  # Xóa từ dòng 2 đến cuối file

Lệnh thay thế

Lệnh thay thế là món ăn chính của sed. Nó giống như "find and replace" nhưng mạnh mẽ hơn!

sed 's/old/new/' file.txt

Lệnh này thay thế lần xuất hiện đầu tiên của "old" bằng "new" trên mỗi dòng.

Cờ thay thế

Cờ là những nâng cấp cho lệnh thay thế của bạn. Dưới đây là bảng các cờ phổ biến:

Cờ Mô tả
g Thay thế tất cả các lần xuất hiện, không chỉ lần đầu tiên
i Không phân biệt chữ hoa chữ thường
p In dòng đã thay đổi
w Ghi kết quả vào file

Ví dụ:

sed 's/cat/dog/g' pets.txt

Lệnh này thay thế tất cả các lần xuất hiện của "cat" bằng "dog".

Sử dụng ký tự phân cách thay thế

Đôi khi, văn bản của bạn chứa nhiều dấu斜杠. Không sao! Chúng ta có thể sử dụng các ký tự phân cách khác:

sed 's#/usr/local/bin#/common/bin#' paths.txt

Tại đây, chúng ta sử dụng '#' thay vì '/' làm ký tự phân cách.

Thay thế bằng không gian trống

Muốn làm biến mất văn bản mà không để lại dấu vết? Dưới đây là cách thực hiện:

sed 's/unwanted//g' file.txt

Lệnh này xóa tất cả các lần xuất hiện của "unwanted" khỏi file.

Thay thế với địa chỉ

Chúng ta có thể kết hợp địa chỉ với thay thế để thực hiện phẫu thuật văn bản chính xác:

sed '3,6s/foo/bar/g' file.txt

Lệnh này thay thế tất cả các "foo" bằng "bar", nhưng chỉ trên các dòng từ 3 đến 6.

Lệnh khớp

Lệnh khớp giống như một ánh sáng spotlight, chiếu sáng các dòng chúng ta quan tâm:

sed -n '/pattern/p' file.txt

Lệnh này chỉ in các dòng chứa "pattern".

Sử dụng biểu thức chính quy

Bây giờ chúng ta đã đến phần thực sự kỳ diệu! Biểu thức chính quy là như wildcard trên steroids. Dưới đây là một ví dụ đơn giản:

sed -n '/^The/p' story.txt

Lệnh này in tất cả các dòng bắt đầu bằng "The".

Khớp ký tự

Biểu thức chính quy có các ký tự đặc biệt hoạt động như shapeshifters:

Ký tự Ý nghĩa
. Bất kỳ ký tự đơn nào
* Không hoặc nhiều ký tự trước đó
^ Đầu dòng
$ Cuối dòng

Ví dụ:

sed -n '/c.t/p' animals.txt

Lệnh này khớp "cat", "cot", "cut", v.v.

Từ khóa lớp ký tự

Lớp ký tự là như các đội của các ký tự. Dưới đây là một số cầu thủ MVP:

Lớp Khớp với
[:alpha:] Ký tự alphabetic
[:digit:] Ký tự số
[:alnum:] Ký tự alphanumeric

Ví dụ:

sed -n '/[[:digit:]]/p' data.txt

Lệnh này in các dòng chứa bất kỳ số nào.

Tham chiếu ampersand

Ký tự ampersand (&) giống như một tấm gương kỳ diệu, phản chiếu điều đã khớp:

sed 's/[0-9]/(&)/' numbers.txt

Lệnh này đặt dấu ngoặc quanh mỗi số.

Sử dụng nhiều lệnh sed

Muốn thực hiện nhiều phép thuật cùng một lúc? Sử dụng tùy chọn -e:

sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt

Lệnh này thực hiện hai thay thế trong một lần!

Tham chiếu ngược

Tham chiếu ngược là như máy thời gian, cho phép chúng ta tái sử dụng các phần của khớp:

sed 's/\(.*\):\(.*\)/\2:\1/' names.txt

Lệnh này hoán đổi văn bản trước và sau dấu hai chấm.

Và đó là tất cả, các học sinh yêu quý của tôi! Chúng ta đã hành trình qua vùng đất của sed và biểu thức chính quy. Nhớ rằng, thực hành là cách để trở nên hoàn hảo. Vậy hãy tiến lên và manipulates văn bản như những pháp sư dòng lệnh mà bạn đang trở thành! Chúc các bạn mã hóa vui vẻ!

Credits: Image by storyset