Lệnh sed trong Linux

Giới thiệu

Trong lab này, bạn sẽ học cách sử dụng lệnh sed (stream editor) mạnh mẽ trong Linux để xử lý và chỉnh sửa văn bản. Lab này bao gồm những kiến thức cơ bản về lệnh sed, bao gồm thực hiện thay thế văn bản, chỉnh sửa nhiều file và hơn thế nữa. Bạn sẽ khám phá nhiều lệnh sed khác nhau và các ứng dụng thực tế của chúng, cho phép bạn thao tác và chuyển đổi dữ liệu văn bản một cách hiệu quả trên dòng lệnh.

Lab bắt đầu bằng việc giới thiệu các nguyên tắc cơ bản của lệnh sed, trình bày cách in toàn bộ nội dung của một file, in các dòng cụ thể, thay thế văn bản, xóa dòng và chèn hoặc thêm văn bản. Sau đó, lab đi sâu vào các kỹ thuật thay thế văn bản nâng cao hơn, hướng dẫn bạn cách thực hiện thay thế trên nhiều file. Cuối cùng, lab bao gồm việc chỉnh sửa nhiều file bằng sed, cho phép bạn hợp lý hóa quy trình làm việc xử lý văn bản của mình.

Tìm hiểu những kiến thức cơ bản của lệnh sed

Trong bước này, chúng ta sẽ tìm hiểu những kiến thức cơ bản về lệnh sed (stream editor) trong Linux. Lệnh sed là một công cụ mạnh mẽ để xử lý và chỉnh sửa văn bản, cho phép bạn thực hiện nhiều thao tác khác nhau trên các file văn bản.

Đầu tiên, hãy tạo một file văn bản mẫu để làm việc:

echo "This is a sample text file." > sample.txt

Bây giờ, hãy khám phá một số lệnh sed cơ bản:

In toàn bộ file

Để in toàn bộ nội dung của file, hãy sử dụng lệnh sau:

sed 's/.*/' sample.txt

Ví dụ đầu ra:

This is a sample text file.

In một dòng cụ thể

Để in một dòng cụ thể, hãy sử dụng số dòng với lệnh p:

sed -n '2p' sample.txt

Ví dụ đầu ra:

This is a sample text file.

Thay thế văn bản

Để thay thế văn bản, hãy sử dụng lệnh s theo sau là mẫu và nội dung thay thế:

sed 's/sample/new/' sample.txt

Ví dụ đầu ra:

This is a new text file.

Xóa dòng

Để xóa một dòng cụ thể, hãy sử dụng lệnh d theo sau là số dòng:

sed '2d' sample.txt

Ví dụ đầu ra:

This is a sample text file.

Chèn hoặc thêm văn bản

Để chèn văn bản trước một dòng, hãy sử dụng lệnh i. Để thêm văn bản sau một dòng, hãy sử dụng lệnh a:

sed '2i This is an inserted line.' sample.txt
sed '2a This is an appended line.' sample.txt

Ví dụ đầu ra:

This is a sample text file.
This is an inserted line.
This is a sample text file.
This is an appended line.

Đây chỉ là một vài ví dụ cơ bản về cách sử dụng lệnh sed. Trong bước tiếp theo, chúng ta sẽ khám phá các thao tác sed nâng cao hơn, chẳng hạn như thực hiện thay thế văn bản trong nhiều file.

Thực hiện thay thế văn bản bằng sed

Trong bước này, chúng ta sẽ khám phá cách thay thế văn bản nâng cao hơn bằng lệnh sed.

Đầu tiên, hãy tạo một file mẫu mới với nhiều lần xuất hiện của từ "old":

echo "This is an old text. Replace the old text with new text." > sample.txt

Thay thế tất cả các lần xuất hiện của một từ

Để thay thế tất cả các lần xuất hiện của một từ, hãy sử dụng flag toàn cục g:

sed 's/old/new/g' sample.txt

Ví dụ đầu ra:

This is an new text. Replace the new text with new text.

Chỉ thay thế lần xuất hiện đầu tiên

Để chỉ thay thế lần xuất hiện đầu tiên, hãy bỏ qua flag toàn cục g:

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

Ví dụ đầu ra:

This is an new text. Replace the old text with new text.

Thay thế trên một dòng cụ thể

Để thay thế văn bản trên một dòng cụ thể, hãy sử dụng số dòng trước lệnh s:

sed '1s/old/new/' sample.txt

Ví dụ đầu ra:

This is an new text. Replace the old text with new text.

Thay thế bằng cách sử dụng regular expressions

Sed cũng hỗ trợ regular expressions. Để thay thế văn bản bằng regular expression, hãy sử dụng cú pháp \1 để tham chiếu đến các nhóm được capture:

sed 's/\(This.*\)old\(.*\)/\1new\2/' sample.txt

Ví dụ đầu ra:

This is an new text. Replace the new text with new text.

Thay thế trong nhiều file

Để thay thế văn bản trong nhiều file, hãy truyền tên file làm đối số cho lệnh sed:

sed 's/old/new/g' sample.txt another_file.txt

Điều này sẽ thực hiện thay thế văn bản trong cả sample.txtanother_file.txt.

Trong bước tiếp theo, chúng ta sẽ học cách chỉnh sửa nhiều file bằng lệnh sed.

Chỉnh sửa nhiều file bằng sed

Trong bước này, chúng ta sẽ học cách sử dụng lệnh sed để chỉnh sửa nhiều file cùng một lúc.

Đầu tiên, hãy tạo hai file văn bản mẫu:

echo "This is the first file." > file1.txt
echo "This is the second file." > file2.txt

Thay thế văn bản trong nhiều file

Để thay thế văn bản trong nhiều file, chỉ cần truyền tên file làm đối số cho lệnh sed:

sed 's/first/updated/g' file1.txt file2.txt

Ví dụ đầu ra:

This is the updated file.
This is the second file.

Chỉnh sửa file tại chỗ

Theo mặc định, sed in đầu ra đã sửa đổi ra console. Để chỉnh sửa file tại chỗ, hãy sử dụng tùy chọn -i:

sed -i 's/second/new/g' file1.txt file2.txt

Bây giờ, các file file1.txtfile2.txt đã được sửa đổi trực tiếp.

Sử dụng file backup

Nếu bạn muốn giữ lại bản backup của các file gốc, bạn có thể sử dụng tùy chọn -i với phần mở rộng backup:

sed -i.bak 's/new/updated/g' file1.txt file2.txt

Điều này sẽ tạo các file backup file1.txt.bakfile2.txt.bak chứa nội dung gốc.

Chỉnh sửa file đệ quy

Để chỉnh sửa file đệ quy trong một thư mục, bạn có thể sử dụng lệnh find cùng với sed:

find . -type f -name "*.txt" -exec sed -i 's/updated/final/g' {} \;

Điều này sẽ thay thế tất cả các lần xuất hiện của "updated" bằng "final" trong tất cả các file .txt trong thư mục hiện tại và các thư mục con của nó.

Với những kỹ thuật này, bạn có thể chỉnh sửa hiệu quả nhiều file bằng lệnh sed. Điều này có thể đặc biệt hữu ích khi bạn cần thực hiện thay thế hoặc sửa đổi văn bản quy mô lớn trên nhiều file.

Tóm tắt

Trong lab này, chúng ta đã học những kiến thức cơ bản về lệnh sed trong Linux, bao gồm in toàn bộ file, in các dòng cụ thể, thực hiện thay thế văn bản, xóa dòng và chèn hoặc thêm văn bản. Chúng ta cũng đã khám phá cách thay thế văn bản nâng cao hơn bằng sed, nơi chúng ta đã học cách thay thế nhiều lần xuất hiện của một từ trong một file, cũng như cách chỉnh sửa nhiều file đồng thời với sed.

Những điểm mấu chốt rút ra từ lab này là tính linh hoạt và sức mạnh của lệnh sed đối với các tác vụ xử lý và chỉnh sửa văn bản trong môi trường Linux.

400+ câu lệnh phổ biến trong Linux