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ì.
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:
Tìm kiếm một dòng bắt đầu bằng projdir
và thay thế toàn bộ dòng bằng một dòng mới:
sed -i 's/^projdir .*$/projdir PacMan/' .ignore
^
và $
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 -i
kể sed
để viết những thay đổi trực tiếp .ignore
, thay vì chỉ xuất ra chúng
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
.
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.
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