powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / [скорее всего perl] Как закоментировать блок текста с вложенными скобками?
13 сообщений из 13, страница 1 из 1
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35668775
makondo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в тексте нужно найти и закомментировать кусок текста такого вида :

Код: plaintext
1.
2.
3.
4.
someHeader {
...
...
..
}


Внутри {...} может встречаться любое количество {..}. Скобки могут быть вложенными . Нужно закомментить их все от первой открывающей до соответствующей закрывающей скобки.
sed'ом такое навряд ли получится.




--
У мудрого человека нет врагов - только учителя
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35669054
fy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fy
Гость
makondo,

Так прокатит?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
[root@test root]# cat tst.sed
qwerty
qwerty {}
test {
{qwe {}
qwe} {dsad}
qwe {
qwe}
}
qwe123
test {
{}
}
[root@test root]# sed "/^test.*$/,/^\}/{s/\(.*\)/#\1/g}" tst.sed
qwerty
qwerty {}
#test {
#{qwe {}
#qwe} {dsad}
#qwe {
#qwe}
#}
qwe123
#test {
#{}
#}
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35669092
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fy,

macondo это может быть и пoдойдет, если у него файлов типа:
tst1.dat[FIXIED]qwerty
qwerty {}
test {
{qwe {}
qwe} {dsad}
qwe {
qwe
}
}
qwe123
test {
{}
}
или
tst2.dat
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
qwerty
qwerty {}
test {
{qwe {}
qwe} {dsad}
qwe {
qwe}
    }
qwe123
test {
{}
}
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35669120
fy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fy
Гость
avb1003,

Это было предложено как вариант. И если Вы, уважаемый, не смогли включить мозг и применить подобный механизм к файлам с другим содержанием, то я Вам сочувствую. Удачи.
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35669134
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fyavb1003,

Это было предложено как вариант. И если Вы, уважаемый, не смогли включить мозг и применить подобный механизм к файлам с другим содержанием, то я Вам сочувствую. Удачи.
В том то и дело, что я как раз то смог. И предложил Вам. Но я не предполагал, что это Вам
так трудно. Извините.
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35669140
fy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fy
Гость
avb1003,

Если не трудно, продемонстрируйте свой вариант для решения подобных задач.
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35669404
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fyavb1003,

Если не трудно, продемонстрируйте свой вариант для решения подобных задач.
У меня нет "своего варианта для решения подобных задач".Каждая из подобных задач решалась мной по-мере
появления адекватно конкретной ситуации, в зависимости от конкретных обстоятельств:
объема исходных файлов, важности 100%-ой правильности решения, финансовой мотивированности
и т.д. В каких-то ситуациях правил "руками" - в нормальном редакторе это нетрудно,
в каких-то использовался вариант типа вашего.
Главный недостаток Вашего "варианта" в контексте данного форума- отсутствие указания условий его применимости, и как следствие, опасность, что какой-нибудь HR-гуру посчитает эту задачу,
адекватной для собеседования, так как у нее есть "простое решение в одну строку".
Что касается возможности решения с помощью регулярных выражений, то я склонен верить Фридлу:
"... Итак, ни один из предложенных вариантов не работает. В сущности, проблема в том, что находить конструкции произвольной вложености при помощи регулярных выражений не удается.Это попросту невозможно..." ( Дж.Фридл. "Регулярные выражения. Библиотека программиста" СПб.:Питер, 2001. c.147)
Когда же мне, примерно три года назад, нужно было "разбираться" с блоками C-ной программы, то делал "честно":
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
@chars=split //,$string;
LOOP:
for $i ( 0 ..$#chars) {
    $chr=$chars[$i];
...
            if($chr eq '{') {
                $level++;
                push @out_curly_bracket,[$level,$source_line_number,$i];
            }
            if($chr eq '}') {
                local $x=pop @out_curly_bracket;
                die "non matching bracket error!\n" unless $x;
                push @all_blocks,[$x->[ 0 ],$x->[ 1 ],$x->[ 2 ],
                        $source_line_number,$i];
                $level--;
            }
...
}

Это был узкоспециализированный скрипт для одноразового использования объемом порядка 1000
строк, не подходящий для публичной демонстрации. Подозреваю(почти уверен), что задачу топикстартера можно решить скриптом для какого-нибудь VI-подобного редактора, но готового
решения у меня нет, равно как и желания сейчас им заниматься. Но если у меня вдруг появится
желание и получится "хорошее" решение, то я его приведу, наверное. Если этого не сделает кто-то другой.
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35669520
fy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fy
Гость
avb1003,

Я Вас понял, спасибо за развернутый ответ.
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35671661
makondo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quote]"... Итак, ни один из предложенных вариантов не работает. В сущности, проблема в том, что находить конструкции произвольной вложености при помощи регулярных выражений не удается.Это попросту невозможно..." ( Дж.Фридл. "Регулярные выражения. Библиотека программиста" СПб.:Питер, 2001. c.147)[/quote]


Это ужасно! Мир перевернулся... ((
Придется на перле писать

Спасибо за ваш sed-скрипт, но почему-то он у меня не работает:

Код: plaintext
1.
2.
 1 / 4420  % cat test.txt|  sed "/^test.*$/,/^\}/{s/\(.*\)/#\1/g}"
sed: command garbled: /^test.*$/,/^\}/{s/\(.*\)/#\ 1 /g}

Видимо, мой sed совсем базовый и не понимает, вы скорее всего GNU-шным пользовались
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35672129
fy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fy
Гость
makondo,
авторпочему-то он у меня не работает

попробуйте переписать так:
Код: plaintext
1.
'/^test.*$/,/^}/s/\(.*\)/#\1/g'

Хотя лучше конечно же написать полноценный скрипт=)
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35672173
makondo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fymakondo,
авторпочему-то он у меня не работает

попробуйте переписать так:
Код: plaintext
1.
'/^test.*$/,/^}/s/\(.*\)/#\1/g'

Хотя лучше конечно же написать полноценный скрипт=)

Спасибо! Теперь работает. Признаюсь честно, я непонял, как это работает ... )
Можете прокомментировать?

Замену s/\(.*\)/#\1/g я понимаю.
но что в ней матчится как \(.*\) ?

Объясните, плз, первую часть. Хоть убейте не пойму, как он матчит вложенные скобки
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35672274
fy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fy
Гость
makondo,

Вложенные скобки определяются как набор символов ".*" (то есть строка состоящая из любого ко-ва любых символов), где их впоследствии и используем как "\1". Слешы пере скобками собственно и нужны для экранирования, так как без них был бы просто набор "(.*)" (то есть со скобками).

Примерчик:
Код: plaintext
1.
2.
3.
4.
#cat test
 111    aaa
#sed 's/^\([0-9]*\)\(.*\)\([a-z]*\)$/\3\2\1/g' test
aaa    111 
...
Рейтинг: 0 / 0
[скорее всего perl] Как закоментировать блок текста с вложенными скобками?
    #35672594
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makondo,
makondo
...
Объясните, плз, первую часть. Хоть убейте не пойму, как он матчит вложенные скобки
А он и не "матчит".
Код: plaintext
1.
/^test.*$/,/^}/
Ищет диапазон, начинающийся со cтроки, в которой с самого начала стоит слово "test",
и кончающийся строкой, первым символом которой стоит символ закрывающей фигурной
скобки.
Код: plaintext
1.
s/\(.*\)/#\ 1 /g
- Здесь же вычурным способом в начале, каждой строки диапазона ставится символ '#'.
Проще было бы:
Код: plaintext
1.
s/^/#/g
Предложенный fy "вариант" будет работать только "для правильно отформатированных" файлов.
Прочитайте мой первый пост.
makondo
...
Это ужасно! Мир перевернулся... ((
Придется на перле писать
...

Ничего страшного. Другие же пишут.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / [скорее всего perl] Как закоментировать блок текста с вложенными скобками?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]