SED trong Linux là gì và bạn sử dụng nó như thế nào?
sed là viết tắt của s tream ed itor và là một lệnh thường được sử dụng trong Linux / Unix. Cái tên này xuất phát từ một bản sao của hai từ đó. Nó không phải là một trình soạn thảo văn bản, mặc dù nó sửa đổi văn bản. Thay vào đó, sed nhận đầu vào văn bản dưới dạng “luồng” và chỉnh sửa luồng theo hướng dẫn của bạn.
Bởi và lớn, mọi người sử dụng sed
như một phiên bản dòng lệnh tìm và thay thế. Lệnh chính trong chương trình được sử dụng để thay thế một chuỗi ký tự cho một chuỗi ký tự khác. Điều này làm cho nó hữu ích cho việc chạy tìm và thay thế các hàm trên một loạt các tệp, nhưng nó không dễ sử dụng như một cái gì đó từ Notepad hoặc Word. Bạn sẽ thấy rằng cú pháp có một chút quen với việc sử dụng, nhưng một khi bạn có được điều đó, bạn sẽ thấy trình biên tập nhỏ gọn này có thể mạnh đến mức nào.
Sử dụng sed để thay thế
Để sử dụng sed, bạn sẽ cần mở một cửa sổ Terminal. Lệnh được gọi với sed
, nhưng việc gõ một mình sẽ không làm gì cả. Bạn cần cung cấp một trong các lệnh, cũng như một số tham số.
Thông số phổ biến nhất là thay thế hoặc s
. Một lệnh thay thế sed
đơn giản trông giống như sau:
sed 's / cat / dog /'
Lệnh đó sẽ ra lệnh sed quét văn bản đến và thay thế mọi thể hiện của chuỗi “con mèo” bằng “con chó”. Để chứng minh, chúng ta sẽ sử dụng lệnh echo
để đưa ra một cái gì đó để làm việc.
echo cat cat | sed 's / cat / dog /'
Có ba phần chính của lệnh sed. Đầu tiên, có sed
bắt đầu chương trình. Sau đó, có s
bắt đầu lệnh thay thế. Dấu gạch chéo chuyển tiếp /
là dấu tách. Chuỗi sau đó sẽ là chuỗi sed tìm kiếm. Chuỗi sau dấu gạch chéo thứ hai sẽ là các ký tự thay thế mà sed ghi vào luồng. Dấu gạch chéo cuối cùng sẽ đóng lệnh. Tất cả cùng nhau, đó 's/text-to-find/text-to-replace/'
.
Lưu ý các dấu nháy đơn trong ví dụ đó. Các dấu nháy đơn cho phép bạn sử dụng các ký tự meta trong lệnh của bạn. Mặc dù dấu ngoặc kép không cần thiết cho hầu hết các ví dụ của chúng tôi, bạn nên phát triển thói quen sử dụng dấu ngoặc kép cho tất cả các lệnh.
Điều gì về chuỗi một phần? Lệnh trên sẽ làm việc trên bất kỳ sự xuất hiện của chuỗi "mèo", ngay cả khi nó là một phần của một từ khác. Ví dụ, "máy phóng" sẽ trở thành "dogapult" là "catamaran" sẽ trở thành "dogamaran".
echo catapult | sed 's / cat / dog /'
Thay thế toàn cầu
Trong ví dụ đầu tiên của chúng tôi, bạn có thể đã nhận thấy chỉ có trường hợp đầu tiên của chuỗi phù hợp đã được thay thế. Giống như nhiều tiện ích GNU, sed là dựa trên dòng. Kết quả là, nó chỉ hoạt động trên các trận đấu đầu tiên trong một dòng. Nếu bạn có nhiều kết quả phù hợp cho chuỗi ứng cử viên của mình trong dòng, chỉ chuỗi đầu tiên sẽ được thay đổi. Để làm cho sed hoạt động trên mọi lần xuất hiện của chuỗi đích, hãy sử dụng cờ g
ở cuối lệnh:
sed 's / mèo / chó / g'
Điều này sẽ hoạt động giống như ví dụ sau:
echo cat catapan catapan | sed 's / mèo / chó / g'
Không có cờ toàn cầu, chỉ có trường hợp “mèo” đầu tiên trong mỗi dòng sẽ được thay thế.
Đặt các tệp đầu vào và đầu ra
Theo mặc định, sed sẽ hoạt động trên đầu vào tiêu chuẩn. Tuy nhiên, đó không phải là quá hữu ích. Để chạy sed trên một tệp, chỉ định tên tệp ở cuối lệnh, như sau:
sed 's / cat / dog / g' oldfile.txt> newfile.txt
Điều này sẽ chạy sed trên “oldfile.txt” và lưu đầu ra của lệnh thành “newfile.txt.” Nếu “newfile.txt” không tồn tại, nó sẽ được tạo bởi lệnh. Nếu bạn không chỉ định tệp đầu ra, sed sẽ lặp lại văn bản mới của tệp vào đầu vào tiêu chuẩn.
Nếu bạn muốn ghi đè nội dung của một tệp, bạn sẽ cần phải sử dụng cờ -i
. Cờ này làm cho các chỉnh sửa "được đặt đúng chỗ".
sed -i '' 's / cat / dog' oldfile.txt
Lệnh này sẽ ghi đè nội dung của tệp đích ngay lập tức, điều này hơi nguy hiểm. Để giữ an toàn, bạn có thể tạo bản sao lưu tại chỗ.
Để tạo bản sao lưu của tệp, hãy đặt phần mở rộng sau -i
. Nó không cần phải là một phần mở rộng chức năng: ".bu" hoặc ".bak" hoạt động tốt. Điều này sẽ tạo ra một tập tin sao lưu với một phần mở rộng.
sed -i.bak 's / cat / dog' oldfile.txt
Điều này tạo ra “oldfile.txt.bak”, chứa dữ liệu văn bản chưa được chỉnh sửa từ phiên bản gốc của “oldfile.txt”.
Kết hợp cụm từ thông dụng
Sức mạnh thực sự của sed
đến từ kết hợp các biểu thức thông thường. Điều này cho phép bạn thiết lập các mẫu cho phù hợp, chứ không phải là chuỗi chữ. Ví dụ, chúng ta có thể sử dụng một cái gì đó giống như chuỗi bên dưới để lặp lại bất kỳ tập hợp một hoặc nhiều số:
echo "123 abc" | sed 's / [0-9] [0-9] * / & & /'
Học thêm
sed là một tiện ích cực kỳ mạnh mẽ với độ sâu sức mạnh tương tự như một ngôn ngữ kịch bản. Để tìm hiểu thêm về khả năng đầy đủ của sed, hãy xem hướng dẫn toàn diện của Bruce Barnett về sed.