LINUX.ORG.RU

Как выделить подстроку между двумя другими подстроками из строки и раскодировать?

 , ,


1

1

Помогите, пожалуйста. Имеется строка такого вида: ...много текста...<p>[params]-u http:// -t &quot;=CC=C1-=CC=C1&quot; -d 20170510[/params]</p> <p><br>...много текста...

Из нее должна получиться такая строка: -u http:// -t "ла-ла" -d 20170510

Ковыряю grep | sed | awk - в итоге «шарики за ролики» и ерунда какая-то... Кодировка, видимо, quoted-printable KOI8-R.


$ echo "...много текста...<p>[params]-u http:// -t &quot;=CC=C1-=CC=C1&quot; -d 20170510[/params]</p> <p><br>...много текста.." | sed -r 's|.*\[params\](.*)\[/params\].*|\1|' | sed 's|&quot;|"|g'
-u http:// -t "=CC=C1-=CC=C1" -d 20170510
$
anonymous
()

str='много текста...<p>[params]-u http:// -t «=CC=C1-=CC=C1» -d 20170510[/params]</p> <p><br>...много текста...'

removed_prefix=${str#*\[params\]}

removed_suffix=${removed_prefix%%\[/params\]*}

echo «$removed_suffix»

vodz ★★★★★
()

Держи, братишка.

$ echo "...<p>[params]-u http:// -t &quot;=CC=C1-=CC=C1&quot; -d 20170510[/params]</p> <p><br>..." | python yoba.py
-u http:// -t "ла-ла" -d 20170510
$ python --version
Python 3.6.0

yoba.py:

import sys
import html
import quopri

for s in sys.stdin:
  params = s[s.find("[params]")+len("[params]"):s.find("[/params]")]
  params = html.unescape(params)
  params = quopri.decodestring(params).decode('koi8-r')
  print(params)

PS. я не прогаю на питоне, но нагуглил всё это за 30 минут.

dsxl
()

Всем большое спасибо! Всё получилось. Из quoted-printable KOI8-R в UTF-8 можно перекодировать с помощью разных средств (php/perl/python), и вот вариант с использованием php в дополнение к выше написанному: php -r "echo iconv(\"KOI8-R\", \"UTF-8\", quoted_printable_decode(\"=CC=C1-=CC=C1\"));"

le_
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.