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!
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