Lệnh sed: Cách thực hiện nhiều chỉnh sửa tệp chỉ với một lệnh trong Linux

Tác giả: VPS chính hãng 11 tháng 12, 2023

“sed” (Stream Editor) là lệnh trong Linux được dùng để tìm, thay thế, chèn và xóa văn bản của chuỗi. Lệnh này chủ yếu được sử dụng để tìm và thay thế văn bản trong chuỗi. Nhiều chỉnh sửa rất hữu ích trong việc giảm thời gian sửa đổi tệp khi người dùng muốn hiển thị đầu ra với một ít văn bản khác nhau. Blog này sẽ trình bày các ví dụ khác nhau về lệnh sed trong Linux để thực hiện nhiều chỉnh sửa trong một tệp. Hãy cùng theo dõi!

Cú pháp chung của lệnh sed

Lệnh SED trong Linux có thể thực hiện nhiều chức năng trên tệp như tìm kiếm, tìm và thay thế, chèn hoặc xóa. Mặc dù việc sử dụng lệnh SED phổ biến nhất trong Linux là để thay thế hoặc tìm. Nhưng bên cạnh đó, bằng cách sử dụng lệnh SED, bạn có thể chỉnh sửa tệp ngay cả khi không cần mở chúng. Đây là cách nhanh hơn nhiều để tìm và thay thế nội dung nào đó trong tệp so với việc mở tệp đó trước tiên trong VI Editor rồi thay đổi nó.

Cú pháp chung:

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

Trong đó:

  • OPTIONS: là tùy chọn được gắn vào lệnh.
  • [SCRIPT] [INPUTFILE…]: là mẫu tìm kiếm và chuỗi thay thế.
Lệnh sed có thể chỉnh sửa tệp với đa dạng tùy chọn

Lệnh sed có thể chỉnh sửa tệp với đa dạng tùy chọn

Các ví dụ của lệnh sed về thực hiện chỉnh sửa tệp trong Linux

Thay thế chuỗi

Lệnh Sed chủ yếu được sử dụng để thay thế văn bản trong một tệp. Lệnh sed đơn giản dưới đây thay thế từ “unix” bằng “linux” trong tệp.

$sed 's/unix/linux/' geekfile.txt

Output:

linux is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Ở đây “s” chỉ định thao tác thay thế. “/” là dấu phân cách. “unix” là mẫu tìm kiếm và “linux” là chuỗi thay thế.

Theo mặc định, lệnh sed thay thế lần xuất hiện đầu tiên của mẫu trong mỗi dòng và nó sẽ không thay thế lần xuất hiện thứ hai, thứ ba…trong dòng.

=>> Cách để khớp chuỗi chính xác bằng lệnh grep trong Linux

Thay thế lần xuất hiện thứ n của mẫu trong một dòng

Sử dụng các cờ /1, /2, v.v. để thay thế lần xuất hiện đầu tiên, thứ hai của mẫu trong một dòng. Lệnh dưới đây thay thế lần xuất hiện thứ hai của từ “unix” bằng “linux” trong một dòng.

$sed 's/unix/linux/2' geekfile.txt

Output:

unix is great os. linux is opensource. unix is free os.
learn operating system.
unix linux which one you choose.
unix is easy to learn.linux is a multiuser os.Learn unix .unix is a powerful.

Thay thế tất cả sự xuất hiện của mẫu trong một dòng

Cờ thay thế /g chỉ định lệnh sed để thay thế tất cả các lần xuất hiện của chuỗi trong dòng.

$sed 's/unix/linux/g' geekfile.txt

Output:

linux is great os. linux is opensource. linux is free os.
learn operating system.
linux linux which one you choose.
linux is easy to learn.linux is a multiuser os.Learn linux .linux is a powerful.

Thay thế từ lần xuất hiện thứ n thành tất cả các lần xuất hiện trong một dòng

Sử dụng kết hợp /1, /2, v.v. và /g để thay thế tất cả các mẫu từ lần xuất hiện thứ n của một mẫu trong một dòng. Lệnh sed sau đây thay thế từ “unix” thứ ba, thứ tư, thứ năm bằng từ “linux” trong một dòng.

$sed 's/unix/linux/3g' geekfile.txt

Output:

unix is great os. unix is opensource. linux is free os.
learn operating system.
unix linux which one you choose.
unix is easy to learn.unix is a multiuser os.Learn linux .linux is a powerful.

Dấu ngoặc đơn tại ký tự đầu tiên của mỗi từ

Ví dụ lệnh sed này in ký tự đầu tiên của mỗi từ trong ngoặc đơn.

$ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'

Output:

(W)elcome (T)o (T)he (G)eek (S)tuff

Thay thế chuỗi trên một số dòng cụ thể

Bạn có thể hạn chế lệnh sed thay thế chuỗi trên một số dòng cụ thể. Một ví dụ là:

$sed '3 s/unix/linux/' geekfile.txt

Output:

unix is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Lệnh sed ở trên chỉ thay thế chuỗi ở dòng thứ ba.

=>> Cách để tìm kiếm tức thì với lệnh less trên Linux

Sao chép dòng được thay thế bằng cờ /p

Cờ in /p in dòng được thay thế hai lần trên thiết bị đầu cuối. Nếu một dòng không có mẫu tìm kiếm và không được thay thế thì /p chỉ in dòng đó một lần.

$sed 's/unix/linux/p' geekfile.txt

Output:

linux is great os. unix is opensource. unix is free os.
linux is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Chỉ in các dòng được thay thế

Sử dụng tùy chọn -n cùng với cờ in /p để chỉ hiển thị các dòng được thay thế. Ở đây, tùy chọn -n sẽ loại bỏ các hàng trùng lặp do cờ /p tạo ra và chỉ in các dòng được thay thế một lần.

$sed -n 's/unix/linux/p' geekfile.txt

Output:

linux is great os. unix is opensource. unix is free os.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Nếu bạn chỉ sử dụng -n mà không có /p thì sed sẽ không in gì cả.

Thay thế chuỗi trên một phạm vi dòng

Bạn có thể chỉ định một dãy số dòng cho lệnh sed để thay thế một chuỗi.

$sed '1,3 s/unix/linux/' geekfile.txt

Output:

linux is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Ở đây lệnh sed thay thế các dòng có phạm vi từ 1 đến 3. Một ví dụ khác là:

$sed '2,$ s/unix/linux/' geekfile.txt

Output:

unix is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful

Ở đây $ chỉ ra dòng cuối cùng trong tệp. Vì vậy, lệnh sed sẽ thay thế văn bản từ dòng thứ hai đến dòng cuối cùng trong tệp.

Xóa các dòng khỏi một tệp cụ thể

Lệnh SED cũng có thể được sử dụng để xóa các dòng khỏi một tệp cụ thể. Lệnh SED được sử dụng để thực hiện thao tác xóa mà không cần mở tệp

Ví dụ:

1. Để xóa một dòng cụ thể, hãy dùng n trong ví dụ này:

Cú pháp:
$ sed 'nd' filename.txt
Ví dụ:
$ sed '5d' filename.txt

2. Để xóa dòng cuối cùng:

Cú pháp:
$ sed '$d' filename.txt

3. Để xóa dòng từ phạm vi x đến y:

Cú pháp:
$ sed 'x,yd' filename.txt
Ví dụ:
$ sed '3,6d' filename.txt

4. Xóa từ dòng thứ n đến dòng cuối cùng:

Cú pháp:
$ sed 'nth,$d' filename.txt
Ví dụ:
$ sed '12,$d' filename.txt

5. Để xóa dòng khớp mẫu:

Cú pháp:
$ sed '/pattern/d' filename.txt
Ví dụ:
$ sed '/abc/d' filename.txt

Trong Linux, nhiều chỉnh sửa chỉ bằng một lệnh sed có thể được thực hiện trên một chuỗi hoặc một tệp bằng cách lặp lại nhiều mẫu sed. Các mẫu sed cụ thể có thể được lưu trữ trong một tệp và tệp đó có thể được áp dụng để thay thế văn bản đã cho. Các bạn có thể mua VPS Linux để có được sự bảo mật cũng như tốc độ hoạt động tối ưu cho quá trình trải nghiệm của mình. Hãy cho chúng tôi biết kết quả thực hiện của bạn bên dưới phần bình luận. Chúc các bạn thành công!