2013-03-05 62 views
6

Tôi đang cố gắng sử dụng sed để thay thế một dòng bằng dấu cách có biến được xác định.Sử dụng sed để thay thế văn bản bằng dấu cách với biến được xác định bằng dấu gạch chéo

Ví dụ,

Tôi muốn thay thế 'một chuỗi câm' với $ lan và lan = "~/afile.py

tôi cho rằng dòng sẽ

sed "s/a dumb string/$lan/g" file.txt 

nhưng điều này để trống phần 'một chuỗi câm' trong tệp.txt.

Vấn đề của tôi dường như đủ đơn giản. Mọi trợ giúp đều được đánh giá cao.

+2

Bạn có chắc là bạn đã đặt biến 'Ian'? Điều gì sẽ xảy ra khi bạn chạy 'echo" <<$Ian>> "'? – ruakh

+2

Bây giờ nó là một chuỗi kết xuất hay một chuỗi ngu ngốc ?! –

+0

ha ha, đó là một chuỗi câm. Xin lỗi, tôi sẽ sửa lỗi chính tả – NPB

Trả lời

10

tôi xác định rằng bởi vì biến @lan của tôi có dấu gạch chéo ở trong đó, tôi cần phải sử dụng lệnh sed sử dụng:

Ví dụ

sed "s:a dumb string:$lan:g" file.txt 

Đây có lẽ là một sai lầm mới làm quen, nhưng tôi không phải là quen thuộc với sed. Cảm ơn sự giúp đỡ của bạn.

7

sed không biết rằng bạn đang chuyển một biến - nó sẽ được hiểu là một phần khác của regex của bạn. Nếu thay thế của bạn có chứa dấu gạch chéo, điều đơn giản nhất để làm là sử dụng một tách char thay thế, như thế này:

sed "s|a dumb string|$lan|g" file.txt 
0

Đôi khi không gian trong chuỗi tìm kiếm không hoạt động rất cần thiết để sử dụng [[: space:]] trong centos.

sed -i 's/User[[:space:]]daemon/User apache/' httpd1.conf 
Các vấn đề liên quan