Grep: tìm kiếm và thay thế dòng đầy đủ


13

Lệnh

 grep "foo" myfile.txt

in tất cả các dòng phù hợp trong tập tin của tôi.

Bây giờ tôi muốn thay thế dòng đầy đủ bằng một chuỗi khác. Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


13

Nếu bạn khớp với một chuỗi con của toàn bộ dòng, bạn có thể sử dụng slệnh sed với regex để dọn dẹp phần còn lại của dòng:

sed -i 's/^.*foo.*$/another string/' myfile.txt

hoặc sử dụng clệnh để thay thế dòng khớp trong một lần:

sed -i '/foo/ { c \
another string
}' myfile.txt

Nếu bạn không muốn gõ các lệnh đa dòng tại dấu nhắc, bạn có thể đặt nó trong một tập lệnh thay thế:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt

cảm ơn! Khi tôi sử dụng tùy chọn thứ hai, tôi nhận được: sed: -e biểu thức # 1, char 0: chưa từng có `{'
kẹp

ở cuối dòng đầu tiên, bạn cần nhập \ và sau đó nhấn Return - điều quan trọng là \ thoát khỏi dòng mới đầu tiên đó. Sau đó, hãy chắc chắn rằng dòng }'nằm trên một dòng riêng biệt từ another string: thay thế là tất cả mọi thứ trên dòng thứ hai đó, bao gồm cả }nếu bạn đặt nó ở đó.
Vô dụng

-1

Bạn có thể sử dụng inplace functionnality của sed :

sed -i -e 's/foo/bar/' myfile.txt

Điều này sẽ chỉ thay thế mỗi foovới barkhông phải là toàn bộ dòng ..
Jahid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.