Cách dễ nhất để thay thế khoảng trắng bằng (dấu gạch dưới) _ trong bash [đóng]


91

gần đây tôi phải viết một đoạn script nhỏ phân tích cú pháp máy ảo trong XenServer và vì tên của máy ảo chủ yếu có khoảng trắng trong Windows XP hoặc Windows Server 2008, tôi phải cắt bỏ những khoảng trắng đó và thay thế bằng dấu gạch dưới _. Tôi đã tìm thấy một giải pháp đơn giản để thực hiện việc này bằng cách sử dụng sed, một công cụ tuyệt vời khi nói đến thao tác chuỗi.

echo "This is just a test" | sed -e 's/ /_/g'

trả lại

This_is_just_a_test

Có những cách nào khác để thực hiện điều này?


8
và câu hỏi là?
RageZ

2
Xin chào latz, Stackoverflow là một trang web hỏi đáp. Bạn đặt câu hỏi và người khác trả lời nó, hoặc bạn có thể trả lời câu hỏi của người khác. Nếu bạn muốn chia sẻ kiến ​​thức của mình, bạn có thể đặt một câu hỏi, sau đó tự trả lời câu hỏi đó (sau một thời gian để người khác trả lời).
mouviciel

2
oups nghĩ rằng tôi sẽ bổ sung kiến ​​thức này theo cách đó nên nó được lưu trữ ở đây. Dù sao sẽ làm điều đó như u nói thời gian tới, bằng cách trả lời câu hỏi của riêng tôi :)
flazzarini

Câu trả lời:


175

Bạn có thể làm điều đó chỉ bằng cách sử dụng vỏ, không cần trhoặcsed

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test

5
Hoặc chuyển đổi tất cả các ký tự từ phi ASCII để dấu gạch dưới: ${str//[^a-zA-Z0-9]/_}; theo cách nào đó, nếu bạn không gắn bó với shell POSIX thuần túy, thì hãy sử dụng các tính năng có sẵn cho bạn.
súng

cũng có thể có những dấu câu hợp pháp. chúng tôi không bao giờ biết.
ghostdog 74

thx cho giải pháp này chính xác những gì tôi đang tìm kiếm. Cảm ơn rất nhiều
flazzarini

17

Đây là lập trình đường viền, nhưng hãy xem xét bằng cách sử dụng tr :

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

Hãy làm nó. Lời kêu gọi đầu tiên ép các khoảng trắng xuống, lệnh thứ hai thay thế bằng dấu gạch dưới. Bạn có thể cần thêm TAB và các ký tự khoảng trắng khác, điều này chỉ dành cho khoảng trắng.

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.