2011-09-28 25 views
5

Tôi muốn biết nếu có cách nào để thực hiện thay thế regexp nhiều lần trong bash với $ {string // substring/replacement} hoặc, có thể, giải pháp nào tốt hơn tồn tại.nhiều thay thế regex trên biến trong bash?

Tôi có một tập lệnh để gửi nội dung cập nhật tới trạng thái và friendika với curl. Ví dụ: Tôi ký thỉnh nguyện thư trực tuyến và được cung cấp để tweet chúng, nhưng muốn gửi đến identica. Tôi mệt mỏi vì dán đồ và phải sửa trong terminal để trốn thoát @ và #,! và? Tôi muốn regexp thay thế chúng trong kịch bản của tôi để Automagically thay đổi

@repbunghole and @SenatorArsehat Stop farking around with #someship! Do you want me to come smack you? | http://someshort.url 

để

\@repbunghole \@SenatorArsehat Stop farking around with \#someship\! Do you want me to come smack you\? \| http://someshort.url 

Tôi không có mạnh sed hay awk fu, nhưng hãy tưởng tượng họ có thể cung cấp các giải pháp, và tôi don 't biết làm thế nào để sử dụng sed mà không cần viết biến vào một tập tin, đọc các tập tin và hành động trên nó, sau đó thiết lập var với var = $ (cat file). Vâng. Tôi khá mới ở công cụ này. Tôi không tìm đủ dữ liệu với $ {string // substring/replacement /} ở trên cho nhiều thay thế. Chạy X lần để thoát khỏi X nhân vật khác nhau có vẻ không hiệu quả.

như

read -p "Enter a string: " a 
b=${a//\@/\\\@} 
c=${b//\#/\\\#} 
d=${c//\!/\\\!} 
e=${d//\?/\\\?} 
f=${e//\"/\\\"} 
g=${f//\'/\\\'} 

vv, vv làm việc trong khi chờ đợi, nhưng nó xấu xí ...

Trả lời

4

cho "nhiều regex thay thế trên biến trong bash? "

cả sed và awk đều có thể làm được. ví dụ tôi muốn thay thế

a->1 
b->2 
c->3 

với sed:

kent$ v=abc 
kent$ newV=$(sed -e's/a/1/; s/b/2/; s/c/3/' <<< $v) 
kent$ echo $newV2 
123 

với awk:

kent$ v=abc 
kent$ newV2=$(awk '{gsub(/a/,"1");gsub(/b/,"2");gsub(/c/,"3")}1' <<< $v)                 
kent$ echo $newV               
123 
Các vấn đề liên quan