Автор Гілка: sed regexp  (Прочитано 1830 раз)

Відсутній Tikhon

  • Кореспондент
  • ***
  • дописів: 135
  • Карма: +0/-0
  • програміст
sed regexp
« : 2006-11-19 21:14:40 »
Допоможить з регекспом на sed:
треба видалити теги {[']} {[/']}  та ['] [/']
З повагою....

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: sed regexp
« Відповідей #1 : 2006-11-20 23:42:03 »
Е-ехх... :)
sed -n -e "
:BEGIN
/^{\['\]}/b OPENBRACE
/^{\[\/'\]}/b CLOSEBRACE
b INSNL

:OPENBRACE
s/^{\['\]}//
x
s/^\[*$/&[/
x
b INSNL

:CLOSEBRACE
s/^{\[\/'\]}//
x
s/^\(\[*\)\[$/\1/
x
b INSNL

:INSNL
s/{\[\/\?'\]}/\n&/
b PRINTIF

:PRINTIF
x
/^$/b PRINT
x
b END

:PRINT
x
P

:END
s/^.*\n//
t BEGIN
" test.txt
Оце чудо дивнеє працює на тезі {[']} {[/']}.
Зробити з цього для ['] [/'] нескладно - поприбирати {}.
І, відповідно, запускати спочатку {[]}, а потім [].

Це якщо я правильно зрозумів задачу - треба прибрати {[']}, {[/']} і все що між ними, причому вони можуть бути вкладеними, на одному чи на різних рядках.
Дещо не оптимізоване - тільки з печі.
P.S. Воно додає деяку кількість '\n'. Це не страшно?..
« Змінено: 2006-11-20 23:51:30 від ISBear »

Відсутній Tikhon

  • Кореспондент
  • ***
  • дописів: 135
  • Карма: +0/-0
  • програміст
Re: sed regexp
« Відповідей #2 : 2006-11-21 00:23:58 »
Е-ехх... :)
sed -n -e "
:BEGIN
/^{\['\]}/b OPENBRACE
/^{\[\/'\]}/b CLOSEBRACE
b INSNL

:OPENBRACE
s/^{\['\]}//
x
s/^\[*$/&[/
x
b INSNL
:CLOSEBRACEs/^{\[\/'\]}//
x
s/^\(\[*\)\[$/\1/
x
b INSNL

:INSNLs/{\[\/\?'\]}/\n&/
b PRINTIF

:PRINTIF
x
/^$/b PRINT
x
b END

:PRINT
x
P

:END
s/^.*\n//
t BEGIN
" test.txt
Оце чудо дивнеє працює на тезі {[']} {[/']}.
Зробити з цього для ['] [/'] нескладно - поприбирати {}.
І, відповідно, запускати спочатку {[]}, а потім [].

Це якщо я правильно зрозумів задачу - треба прибрати {[']}, {[/']} і все що між ними, причому вони можуть бути вкладеними, на одному чи на різних рядках.
Дещо не оптимізоване - тільки з печі.
P.S. Воно додає деяку кількість '\n'. Це не страшно?..

ого скільки букАв?!  :o
Все, що між тегами прибирати не треба, навпаки залишити.
Зайві '\n' також не потрібні, тому що вхідний потік - словник.
З повагою....

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: sed regexp
« Відповідей #3 : 2006-11-21 12:22:18 »
А, ну тоді задача значно спрощується:
sed -e "s@\({\[/\?'\]}\|\[/\?'\]\)@@g" test1.txt
прибирає "{[']}", "{[/']}", "[']", "[/']" з тексту.

Відсутній Tikhon

  • Кореспондент
  • ***
  • дописів: 135
  • Карма: +0/-0
  • програміст
Re: sed regexp
« Відповідей #4 : 2006-11-21 12:34:14 »
дуже дякую, те, що треба
З повагою....