LINUX.ORG.RU

Стоит ли учить sed?

 ,


1

3

Я в последнее время настраивался на изучение sed, но сегодня вдруг наткнулся на одну фигню, которая заставила меня усомнится. Я ковырялся с регэкспом в виме,

s/\([(<{\[]\).*\([)>}\]]\)/\1\2/g
которое удаляет внутри скобок текст. Всроде работает, осталось ограничить жадность. Упс. Я, честно говоря не знаю, можно ли это сделать в виме, но пока я гуглил, я наткнулся на учебник emulek'а по sed и узнал, что этого нет в нем вообще. Я вот че то думаю, а не является ли это серьезным недостатком? Вот, например, в js я мог бы сделать
/([({\[<]).*?([)}\]>])/g
-- все достаточно просто. А как я бы это сделал если нет ограничения?

Вот решил спросить у опытных. А стоит ли учить его? Является ли это серьезным недостатком? И, может быть, там еще много чего нет? Зачем тогда я буду тратить время на изучение неэффективного инструмента?

Стоит ли учить sed?

Стоит. А зачем?

yvv ★★☆ ()

s/\([^[({]*\)[[({][^])}]*[])}]*\([^[({]*\)/\1\2/g

mix_mix ★★★★★ ()

Стоит ли учить sed?

Если бы я не знал sed, то я бы на своей текущей работе рехнулся. Как и grep, xargs, sort, uniq, head. Без них просто никак невозможно быстро анализировать выводы самых разнообразных команд, когда каждая команда нужна лишь один раз. Могу себе представить лопатить это все дело на python каждый раз

vertexua ★★★★☆ ()
Ответ на: комментарий от vertexua

А какая разница, куда ты перенаправляешь поток на обработку, питону или седу, или чему то еще?

terminator-101 ()

имхо

sed - это лютейший звиздец. Мне часто проще запустить perl -e, чем решить задачу sed'ом

Stil ★★★★★ ()

Там man две страницы, учить нечего. Ты еще echo поучи.

учебник emulek'а по sed

Ахахаха.

anonymous ()
Ответ на: комментарий от terminator-101

В Python не пишутся однострочечники. Хотя бы потому что в Python делать сложно что-то с помощью одной строки. В Perl проще, но не будем о грустном.

Ну вот мне нужно например что-то такое

ololo | sort -g -k3 | cut -d, -f2 | sort | uniq | xargs t -P20 -I {} do_stuff {} -rvf

Это мне надо один раз. Мне открывать my_script_17_20_11_11_2014.py и писать туда мрак, подключать парсер csv или просто через цикл и split предлагаешь? Ну и традиционно threading/multiprocessing, ведь -P20 в xargs?

vertexua ★★★★☆ ()
Ответ на: комментарий от vertexua

Если бы я не знал sed, то я бы на своей текущей работе рехнулся. Как и grep, xargs, sort, uniq, head.

Невиданно! Гентушника обучили юниксу! Впервые в истории!

anonymous ()
Ответ на: комментарий от anonymous

man sed

COMMAND SYNOPSIS

This is just a brief synopsis of sed commands to serve as a reminder to those who already know sed; other documentation (such as the texinfo document) must be consulted for fuller descriptions.

$ man sed | wc -l
230
$ info sed | wc -l
2499
shdown ()
Ответ на: комментарий от terminator-101

Ну и как мне с помощью него решить описаную задачу? Допускаю что можно, но посложнее и подольше

vertexua ★★★★☆ ()
Ответ на: комментарий от shdown

Там регулярки объясняются. Сам sed тупой как палка.

anonymous ()
Ответ на: комментарий от anonymous

Ну так, и дело в регулярках, что они не perl-like, и я их не знаю. Как обойтись без ограничения жадных кванторов в общем случае?

terminator-101 ()
Ответ на: комментарий от vertexua

на питоне часто быстрее. использую и sed и python

anonymous ()
Ответ на: комментарий от anonymous

Да, ты прав, они практически эквивалентны в этом плане. Оба — отстой:). Я че-то запарился


re=/([({\[<]).*?([)}\]>])/g
s="foo[foo ) bar]foo" 
w(s.match(re))
re=/[({\[<][^)}\]>]*[)>}\]>]/g
w(s.match(re))

//  [ '[foo )' ]
//  [ '[foo )' ]


terminator-101 ()
Ответ на: комментарий от terminator-101

Размечтался, такое регулярками вообще не парсят.

anonymous ()

Лично я порой в скриптах юзаю sed, но делаю я это при помощи гуглового допинга ;) Я НИЧЕГО не знаю о sed но активно его применяю когда надо модифицировать файл конфигов автоматизированно из скрипта...

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от vertexua

Ты специально не упомянул man? стебёшься над ТС :)

ziemin ★★ ()
Ответ на: комментарий от I-Love-Microsoft

не хотелось бы разгребать твой говнокод

anonymous ()

достаточно классических регулярок

ибо sed же тьюринг полон так что учить не нуна.

а использовать по месту(имея представления о возможностях) а уточнить гуглением нюанс синтаксиса можно по надобности.

полезно grep -> awk -> PERL чуствовать .

qulinxao ★★☆ ()

и узнал, что этого нет в нем вообще. Я вот че то думаю, а не является ли это серьезным недостатком?

вы не дочитали, это не баг, а фича. Нежадные выражения работают намного медленнее, и вообще не нужны(это можно строго доказать).

Алсо, вы можете пересобрать sed так, что-бы она умела PCRE, в которых можно нежадные выражения использовать.

emulek ()
Ответ на: имхо от Stil

sed - это лютейший звиздец

на самом деле, perl и sed очень близки. Sed несколько попроще, вот и вся разница. Мне sed удобнее потому, что с UTF-8 sed работает без костылей и без проблем.

emulek ()
Ответ на: комментарий от terminator-101

А что, питон не может python -e?

может, но надо писать многобукв. Ты ещё сишку вспомни, с tcc -run.

emulek ()
Ответ на: комментарий от anonymous

Там регулярки объясняются. Сам sed тупой как палка.

в принципе да. Вот список sed-команд:

a,b,c,d,D,e,g,G,h,H,i,l,n,N,p,P,q,Q,r,R,s,t,T,v,w,W,x,y,z.

(если ни чего не забыл)

Если ты их все изучил(что не слишком сложно), то да.

emulek ()
Ответ на: комментарий от terminator-101

Ну так, и дело в регулярках, что они не perl-like

ERE это подмножество PCRE без возвратных выражений(которые не нужны).

Как обойтись без ограничения жадных

зачем тебе нежадные? Можно пример?

emulek ()
Ответ на: комментарий от I-Love-Microsoft

Я НИЧЕГО не знаю о sed но активно его применяю когда надо модифицировать файл конфигов автоматизированно из скрипта...

ты знаешь, что у молотка есть два конца, один заострённый, а второй тупой. В принципе, забивать гвозди можно любым концом. Если тебе своих пальцев не жалко, и если тебя никто не видит(а то засмеют).

emulek ()
Ответ на: комментарий от terminator-101

Никакой. Используй то, что удобно тебе.

Aswed ★★★★★ ()
Ответ на: комментарий от emulek

Но... всё работает как надо. Славься гугль! :) А еще я vi не разумею, вместо git - hg, смяшно?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Но... всё работает как надо. Славься гугль!

я же говорю: можно гвозди и острым концом молотка забивать.

А еще я vi не разумею

повод для гордости?

вместо git - hg,

ну я тоже предпочитаюю mercurial, это-то тут при чём?

emulek ()
Ответ на: комментарий от emulek

ну я тоже предпочитаюю mercurial, это-то тут при чём?

Ну мало ли это еще один критерий не-ылитности?.. ;)

I-Love-Microsoft ★★★★★ ()

http://sam.cat-v.org/cheatsheet/

не для заучивания а токмо эрудиции для.

в plan9port (как и в плане изначальном)

очень информативный(и лаконичный) man re

ежель sed тебе интересен не как регулярка с примесями, а полноценный(программирования) язык манипуляции текста(ибо марков алгорифм) то не нужно ибо страдат.

qulinxao ★★☆ ()
Ответ на: комментарий от emulek

у dc калькулятора команды ещё более лучше одеваться

qulinxao ★★☆ ()

стоит ли учить его…Зачем

Затем, что это весело. Применять «настоящий» язык для решения простых задач - унылый кодинг. Сооружение решения из ограниченных инструментов - развлечение, сродни постройки Rube Goldberg machine.

DonkeyHot ★★★★★ ()

а не является ли это серьезным недостатком

Да, это является серьёзным недостатком. sed давно надо было перепиливать в сторону поддержки нежадных и структурных регулярок, да вот что-то никто не догадался.

quantum-troll ★★★★★ ()
Ответ на: комментарий от quantum-troll

Да, это является серьёзным недостатком. sed давно надо было перепиливать в сторону поддержки нежадных и структурных регулярок, да вот что-то никто не догадался.

да давно уже запилили PCRE. Пересобери, если тебе это так нужно.

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