Lệnh replace một ký tự / từ / cụm từ trong nội dung của file trên Linux

Các pro cho e hỏi là trên Linux có lệnh nào mà có thể find & replace 1 từ hay cụm từ đc nhập vào ko ạ?
Theo e tìm hiểu thì có lệnh: sed 's/<word, phrase>/<replacement>/' <file's name> nhưng nó chỉ thay đổi tạm thời thôi (tức là thay đổi trên terminal, còn bản chất trong file nội dung vẫn giữ nguyên) nên lên đây hỏi các pro còn lệnh nào khác ko ạ?

Thêm -i vào câu lệnh sed

sed -i 's/<word, phrase>/<replacement>/' <file's name>
2 Likes

Thanks anh, nhân tiện cho e hỏi luôn là có cách nào làm cho nó replace cái word mình truyền vào ko viết hoa trong kia từ khóa trong file lại viết hoa ko ạ? (ví dụ lệnh grep ...grep -i ... ấy :slight_smile: )

Em thử thêm gI vào cuối lệnh sed

sed -i 's/<word, phrase>/<replacement>/gI' <file's name>
3 Likes

Vậy trong trường hợp mình cần sử dụng g thì để như vậy hả anh?

sed -i 's/<word, phrase>/<replacement>/g/gI' <file's name>

Không em, anh bỏ thêm g vào để nó tìm hết ấy mà. Dùng I là đủ rồi.

2 Likes

Cho e hỏi thêm 1 vấn đề nữa là ở chỗ: 's/<word, phrase>/<replacement/' thì cái word, phrasereplacement mình có đc phép để một chuỗi (có khoảng trắng) ko a?
Ví dụ trong file có nội dung là: Happy new year!
thì e để:

sed -i 's/"new year"/"old year"/gI' file

thì nó vẫn ko đổi đc cụm từ new year thành old year anh ạ :((

em đừng có dùng dấu " ở trong phần find và replace làm gì.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?