Lệnh thay thế văn bản phức tạp (?) Unix


0

Dòng lệnh tương đương với: Đối với mọi tệp có chứa "AAA" trong nội dung của nó, hãy tìm "BBB" và thay thế bằng "CCC"

Do đó, lệnh sẽ khớp và thay thế BBB trong một tệp:

<html>
<head></head>
<body>
AAA
Hello world!
BBB    
</body>
</html>

Nhưng không phải trong một tập tin:

<html>
<head></head>
<body>
Don't match me!
BBB    
</body>
</html>

Cảm ơn trước!

Câu trả lời:


1

Hãy thử một cái gì đó như:

grep -Rl AAA . | xargs sed -i -e 's/BBB/CCC/'

Bạn có thể vui lòng giải thích điều này thực sự có nghĩa là gì? Có vẻ như nó hoạt động cho người hỏi, nhưng đối với bất kỳ ai khác tìm thấy bài đăng này sau đó, điều này thực sự làm gì ?
nhinkle

Chắc chắn rồi. grep -R PATTERN DIRcó nghĩa là grep tất cả các tệp trong DIR, đệ quy. Thông thường, nó in các dòng khớp với MẪU, nhưng -ltùy chọn này chỉ có nghĩa là in tên tệp phù hợp ...
Mikel

Vì vậy, nửa đầu đang in ra một danh sách các tập tin có chứa AAA. Sau đó, chúng tôi sử dụng xargsđể làm một cái gì đó với mỗi tập tin. Trong trường hợp này, chạy sed, thay thế lần xuất hiện đầu tiên BBBbằng CCC. Nếu tất cả các lần xuất hiện cần được thay thế, đặt gsau lần cuối /.
Mikel
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.