< HomePage | Снимки
<- Сряда, 6 Април 2005 | Начална страница | Петък, 8 Април 2005 ->
Четвъртък, 7 Април 2005
14:36

(без)Полезен код за днес - perl one liner, който обръща текст кодиран по следният начин %aa%bb%cc%d0 (използва се за кодиране на символи с ASCII код по-голям от 127), в самите символи, които са кодирани:

echo "%C1%E0%E9 %F5%F3%E9" | perl -ne 'while (m/%([a-zA-Z0-9]{2})/) {$x=pack("C",hex("0x$1")); s/%$1/$x/;} print;'

[ Коментари: 6 ]
Коментари

Абе... не че нещо, ама...

perl -pe '1 while s/%([A-Fa-f0-9]{2})/pack("H*",$1)/ge'

:))

И между другото, и в твоя пример трябва да бъде A-Fa-f, а не A-Za-z :)

Поздрави,
Петър

Написа Петър Пенчев (www) на 07-Apr-2005 15:26


TIMTOWTDI, но твоето е по-оптимално. Личи си че си по-спец на perl-а

Написа Георги Чорбаджийски (www) на 07-Apr-2005 18:30


Защо е нужен while при наличието на -p?
Така е добре :

perl -pe 's/%([A-Fa-f0-9]{2})/pack("H*",$1)/ge'

Написа Владимир Пенов (www) на 08-Apr-2005 17:39


Хмм... в случая между while и -p връзка няма много; това, което прави while ненужен, е /g. А защо оставих while - бях се заблудил, че това е един от случаите, когато това е нужно - като случаите, описани в perldoc perlop при 'Occassionally, you can't use just a "/g"...' - последният пример там, с разширяването на табулациите до интервали, е особено забавен, ако заместиш 1 while s///e с s///ge :)
Но прав си, тук не е нужно, и без while е по-просто.

Написа Петър Пенчев (www) на 08-Apr-2005 20:05


Добре де, и между while и -p има връзка, но само доколкото while беше нужен при -n заради print, а при -p няма изричен print... а сега достатъчно флупости наговорих за една вечер :)

Написа Петър Пенчев (www) на 08-Apr-2005 20:06


http://linux.drun.net/files/_

ей това скриптче мисля върши същата работа, и е направено да преименува всички файлове в текущата директория :)

Написа Красимир Казаков на 12-Apr-2005 18:19