powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / вопрос по sed +
8 сообщений из 8, страница 1 из 1
вопрос по sed +
    #33041920
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
удалось для него накропать относительно полезный скрипт,
который сшарповские текст переделывает в (почти) латех.

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

перехода на метку

(2)t label

и применения области регулярных выражений и буфера хранения.

может кто знает примеры, когда понятно, что они (переход на метку и работа с буферами хранения) делают?
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
                         
                         # //-                      удалить
/\/\/-/d                
                         # /*- бла бла бла   */    удалить
/\/\*-/,/\*\//d         
                         # класс оформить как раздел
                         # и занести в индекс
/class[ 	]/{
s/\(.*class[ 	]*[^{ 	]*\)\(.*\)/\
. 4  \ 1 \
.x \ 1 /p                


r file.dsc.tmp
n
}

/struct[ 	]/{
s/\(.*struct[ 	]*[^{ 	]*\)\(.*\)/\
. 4  \ 1 \
.x \ 1 /p                


r file.dsc.tmp
n
}



/enum[ 	]/{

s/\(.*enum[ 	]*[^{ 	]*\)\(.*\)/\
. 4  \ 1 \
.x \ 1 /p


/enum/r file.dsc.tmp

}


                         #### start of comments
                         # вывести одну строчку  c  одиночным коментарием в документ (если пробелы перед ним)
/protected/,/[{,;]/!{
/internal/,/[{,;]/!{
/public/,/[{,;]/!{
/^[	 ]*\/\/[^/*-]/s/[	 ]*\/\///gp
}
}
}
                         # вывести строчку с доп одиночным комментом. форматирование выключить
                         #   //* или /// as MS want

/protected/,/[{,;]/!{
/internal/,/[{,;]/!{
/public/,/[{,;]/!{

/\/\/[*/]/{
i\
.n
p
a\
.f

}
}
}

}

                         #  вывести часть кода без форматирования /**/ /**/
/\/\*\*/,/\*\*\//{
i\
.n

p
a\
.f

}

                         #  раскрыть коментарии и вывести их в выходной документ
                         # если перед открытием нет символов
                         # и они не стоят после  имени функции до открсобки
/\/\*\*/,/\*\*\//!{
/public/,/{/!{

/^[ 	]*\/\*/,/\*\//{
s/\/\*//
s/\*\///
p
}

}
}
                        ###### enf of comment 


                       #
                       # перед  публичным членом  вывести абзац с дефисом
                       # отключить форматирование
                       # после  ; или  { включить форматирование
                       #  ИЛИ
                       # случай все в одной строчке           #### class
/public.*class/!{
/public.*struct/!{
/enum/!{


/public.*[;{]/{
i\
.-  \
.n

s/{[ \t]*[^ \t]$//
p

a\
.f

n
}

/protected.*[;{]/{
i\
.-  \
.n

s/{[ \t]*[^ \t]$//
p

a\
.f

n
}


/internal.*[;{]/{
i\
.-  \
.n

s/{[ \t]*[^ \t]$//
p

a\
.f

n
}
                       # end of one line 

                       # случай строчек больше двух
/public[^;{]*$/,/[;{]/{
/public/i\
.-     \
.n


/[;{]/{
s/{[ \t]*[^ \t]$//
a\
.f

}
                       #
p

}

/protected[^;{]*$/,/[;{]/{
/protected/i\
.-     \
.n


/[;{]/{
s/{[ \t]*[^ \t]$//
a\
.f

}
                       #
p

}

/internal[^;{]*$/,/[;{]/{
/internal/i\
.-     \
.n


/[;{]/{
s/{[ \t]*[^ \t]$//
a\
.f

}
                       #
p

}
}
                                                           #### class

}
}  
:exit
d

...
Рейтинг: 0 / 0
вопрос по sed +
    #33042265
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скрипт интересный, спасибо.
щас уже так мало применяют sed, он незаслуженно забыт.

А насчет буфера - помнится, классическое его применение - это
перемещение в тексте строк с определенными паттернами или их обмен.
...
Рейтинг: 0 / 0
вопрос по sed +
    #33043762
Alex Roudnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще sed - самая непознаваемая часть Юникса. Я когда то писал инструкцию, но так и не смог понять, как буфера в нем работают. Сегодня для СЛОЖНЫХ преобразований проще использовать перл.

А пример прекрасный.
...
Рейтинг: 0 / 0
вопрос по sed +
    #33043800
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну раз вам так нравится,
то вот все
http://sql.ru/forum/actualthread.aspx?tid=176748
...
Рейтинг: 0 / 0
вопрос по sed +
    #33043801
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-null-
ну да там чето кудато перемещается.
только не понятно, как с этого пользу получить.
я через sed проганяю скрипты по генерации базы данных.
удобно длинные референсы там держать.

типа такого чтото

s/`sex'/char(1) not null default '' references db.sex_t(id) on detete restict/g
...
Рейтинг: 0 / 0
вопрос по sed +
    #33043870
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помнится тока примитивный и классический пример из литературы - обмен строк с заданным паттерном.
Правда, мне он кажется несколько надуманным.




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
cat test.txt

 1 
 2 
 11 
 22 
 333 
 444 
 111 
 222 

скрипт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#!/bin/sed -f

/ 1 /{
h
d
}
/ 2 /{
G
}
переставляет соответствующие строчки :-)


Но вообще согласен - сейчас sed используем в основном как маленькие однострочники в составе shell программ.

Но иногда было интересно делать аналоги на perl/awk/sed и смотреть время выполнения. Частенько sed побеждает :-)
...
Рейтинг: 0 / 0
вопрос по sed +
    #33044362
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сенкс
...
Рейтинг: 0 / 0
вопрос по sed +
    #33663074
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)))
спасибо -Null- еще раз.
не надуманный пример
из сишарповского (думаю с++ и джава тоже покатят) текст
вытягиваю пары наследования классов
родитель - потомок.
Код: 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.
27.
28.
29.
#                 delete multiline comment 
/\/\*/,/\*\//d

/:/d
/,/d
/\bclass\b/,/{/{
                          # class
                          # name1
                          # name2
                          # ...
                          # {    ------ or
                          # class
                          # name1
                          # {
                          # if class name1 +> remember  name1
  /\bclass\b/,/\b\w\w*\b/{
    /\bclass\b/d
    /\b\w\w*\b/h
    d
  }
  /{/d
                         # restore name1

  G
                         # 2 lines +> 1 line
  s/\n/:	/
  p
}


а из списка потом делаю элементы латеха и в пояснительную записку.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / вопрос по sed +
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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