2011-02-22 18 views

cevap

8

bash yerleşik Printf özel biçim belirticisi \ x dönüştürür (yani% B) * * ilgili değere:

$ str='foo%20%5B12%5D' 
$ printf "%b\n" "${str//%/\\x}" 
foo [12] 
+1

Tamam, teşekkürler, isterseniz komut dosyasım: http: //pastebin.com/jN862wFZ – Dorian

+1

Bazı küçük düzeltmeler yaptım ve yoğunlaştırılmış bir versiyon yazdım: http://pastebin.com/y8KBgVA2 – marco

+0

Çok teşekkürler, kısa versiyonun benim için korunması zor, bu yüzden uzun süredir devam ediyorum. bir. – Dorian

1

Son olarak, sayesinde IRC kanalı #bash için, bir "çok kötü" çözelti Bulunan:

echo `echo string%20with%5Bsome%23 | sed 's/%/\\\x/g'` 
+0

Ben echo' 'çevreleyen sizi satın görmüyorum. % 20 ile% 8Be% 23 | sed 's /%/\\\ x/g' çalışmıyor? – Thanatos

+1

@Thanatos: Sed yalnızca% 20 ile% 5Bsome% 23' dizgisini 'string \ x20with \ x5Bsome \ x23' olarak değiştirir. Bunu “echo -e” ye aktarmak, '\ x..' kaçışlarının doğru bir şekilde işlendiği anlamına gelir. [Kayıp '-e' ve backticks çift tırnak içine alınmalıdır:” echo -e "$ (% 20with% 5Bsome% 23 | sed 's /%/\\\ x/g'). – bobbogo

+1

Bir dosyadan değiştirmek isterseniz: echo \ 'sed 's /%/\\\ x/g' $ dosya \'> $ newfile' – lolesque

İlgili konular