2012-02-08 36 views
14

Tôi muốn thay thế một chuỗi bằng ký tự đại diện nhưng nó không hoạt động.sử dụng SED với ký tự đại diện

Chuỗi trông giống như "some-string-8"

tôi đã viết

sed -i 's/string-*/string-0/g' file.txt 

nhưng sản lượng là

some-string-08 

Trả lời

25

Các dấu hoa thị (*) có nghĩa là "zero hoặc nhiều mục trước đó ".

Nếu bạn muốn kết hợp bất kỳ ký tự đơn sử dụng

sed -i 's/string-./string-0/g' file.txt 

Nếu bạn muốn kết hợp bất kỳ chuỗi (tức là bất cứ ký tự đơn zero hoặc nhiều lần) sử dụng

sed -i 's/string-.*/string-0/g' file.txt 
+0

tốt, có thể câu hỏi của tôi chưa hoàn thành .... lệnh của bạn hoạt động cho tính năng này. Tuy nhiên nếu tôi có 'some-string-8 -x --command acommand', đầu ra của việc thực hiện lệnh đó là' some-string-0'. nó sẽ xóa tất cả các ký tự sau đó. Tôi muốn 'some-string-0 -x --command acommand' – mahmood

+0

ok lệnh đầu tiên là những gì tôi muốn – mahmood

+0

nếu bạn muốn sử dụng ký tự đại diện trong chuỗi thay thế? ví dụ: thay thế 'AAA. * BBB' bằng 'CCC. * DDD' – user2561747

5

Vì vậy, khái niệm về "ký tự đại diện" trong Cụm từ thông dụng hoạt động hơi khác một chút. Để khớp với "bất kỳ ký tự nào", bạn sẽ sử dụng "." Công cụ sửa đổi "*" có nghĩa là khớp với bất kỳ số lần nào.

Các vấn đề liên quan