tra-loi-cau-hoi-phat-trien-web.com

Sử dụng 'sed' để tìm và thay thế

Tôi biết câu hỏi này có lẽ đã được trả lời trước đây. Tôi đã thấy nhiều chủ đề về điều này ở nhiều nơi, nhưng câu trả lời thường khó rút ra cho tôi. Tôi đang tìm kiếm sự giúp đỡ với việc sử dụng ví dụ về lệnh 'sed'.

Nói rằng tôi muốn hành động theo tệp "hello.txt" (trong cùng thư mục với Nhắc). Bất cứ nơi nào nó có cụm từ "vài", nó nên được đổi thành "asd". Lệnh sẽ trông như thế nào?

338
roo

sed là đường dẫn s ed itor , trong đó bạn có thể sử dụng | (pipe) để gửi luồng tiêu chuẩn (cụ thể là STDIN và STDOUT) thông qua sed và thay đổi chúng theo chương trình một cách nhanh chóng, biến nó thành một công cụ tiện dụng trong truyền thống triết lý Unix; nhưng cũng có thể chỉnh sửa tệp trực tiếp bằng cách sử dụng -i tham số được đề cập dưới đây.
[.__.] Hãy xem xét các điều sau :

sed -i -e 's/few/asd/g' hello.txt

s/ được sử dụng để s tạo ra biểu thức tìm thấy few với asd:

Số ít, người dũng cảm.


Các asd, dũng cảm.

/g là viết tắt của "toàn cầu", có nghĩa là làm điều này cho toàn bộ dòng. Nếu bạn rời khỏi /g (với s/few/asd/, luôn cần có ba dấu gạch chéo bất kể là gì) và few xuất hiện hai lần trên cùng một dòng, chỉ few đầu tiên được thay đổi thành asd:

Một vài người đàn ông, một vài phụ nữ, những người dũng cảm.


Đàn ông asd, ít phụ nữ, dũng cảm.

Điều này hữu ích trong một số trường hợp, như thay đổi các ký tự đặc biệt ở đầu dòng (ví dụ, thay thế các ký hiệu lớn hơn một số người sử dụng để trích dẫn tài liệu trước đó trong các chủ đề email bằng một tab ngang trong khi để lại bất đẳng thức đại số được trích dẫn sau dòng không bị ảnh hưởng), nhưng trong ví dụ của bạn, nơi bạn chỉ định rằng mọi nơifew xảy ra thì nên thay thế, đảm bảo bạn có /g.

Hai tùy chọn (cờ) sau đây được kết hợp thành một, -ie:

-i tùy chọn được sử dụng để chỉnh sửa i n trên tệp hello.txt.

-e tùy chọn chỉ ra e xpression/lệnh để chạy, trong trường hợp này là s/.

Lưu ý: Điều quan trọng là bạn sử dụng -i -e để tìm kiếm/thay thế. Nếu bạn làm -ie, bạn tạo bản sao lưu của mọi tệp có chữ 'e' được thêm vào.

630
Mohammad Etemaddar
sed -i 's/fea/asd/g'  hello.txt

g : Toàn cầu

s : thay thế

- i: thời gian thực hoạt động với tệp inplace

75
PersianGulf