Làm thế nào tôi có thể thay thế văn bản sau một từ cụ thể bằng cách sử dụng sed?


12

Tôi có một tập tin tên .ignore. Trong nhu cầu thay thế projdir. Ví dụ:

ignore \..*
ignore README
projdir Snake

Tôi cần thay thế Snake bằng, ví dụ: "PacMan". Tôi đọc trang người đàn ông, nhưng tôi không biết phải làm gì.

Câu trả lời:


18

Tìm kiếm một dòng bắt đầu bằng projdirvà thay thế toàn bộ dòng bằng một dòng mới:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^$là các điểm đánh dấu đầu / cuối dòng, do đó mẫu sẽ khớp với toàn bộ dòng; .*phù hợp với bất cứ điều gì. Các -ikể sedđể viết những thay đổi trực tiếp .ignore, thay vì chỉ xuất ra chúng


5

Một cách tiếp cận là viết lại toàn bộ dòng, sử dụng phản hồi cho các phần bạn muốn giữ:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

Một cách tiếp cận khác là viết lại phần đó của dòng, nhưng chỉ khi một số phần khác khớp:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

Cả hai ví dụ đều viết lại từ được phân tách bằng khoảng trắng thứ hai trên các dòng có từ đầu tiên projdir.


3

Mặc dù đây là một bài viết cũ và nó dường như được giải quyết cho bạn bằng câu trả lời được chấp nhận, nhưng câu hỏi thực tế chưa được trả lời. Vì vậy, để hoàn thiện và giúp đỡ người khác:

Đây là câu trả lời thực sự phù hợp với "Snake" chứ không phải cho các dòng bắt đầu với "projdir" ...

sed -r 's/(^.*)Snake/\1PacMan' .ignore

Điều này thay thế mọi thứ từ đầu dòng bao gồm "Rắn" bằng mọi thứ trước "Rắn" + "Pacman". \ 1 là viết tắt của những gì được khớp bên trong (). Mọi thứ sau khi "Rắn" vẫn còn nguyên.


1
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ projdir là tìm dòng bắt đầu bằng chuỗi projdir. . * $ Có nghĩa là chuỗi cho sau chuỗi projdir trong cùng một dòng. Chuỗi projdir PacMan là chuỗi mà chúng tôi đang thay thế. g là dành cho toàn cầu - để thay thế tất cả các dòng như vậy bắt đầu bằng projdir. .ignore là tên của tệp


1
Bạn có thể vui lòng mở rộng câu trả lời của bạn và làm rõ những gì là gì?
Romeo Ninov

Câu trả lời sẽ hữu ích hơn nhiều nếu chúng bao gồm các giải thích về cách thức và lý do tại sao một lệnh hoặc đoạn mã hoạt động.
Anthony Geoghegan

Tôi hy vọng điều này hữu ích hơn sau khi chỉnh sửa
Tinu
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.