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

Доброго всем дня.

Надо из множества файлов исходников на с++ поудалять функцию wxT("...") и .c_str() заодно


Код: [Выделить]
for /R %%i in (*.cpp *.h) do sed -i "s/wxT([^)]*)/#/;/#wxT(/s/)#//;s/#wxT(//;s/.c_str()//g" %%i

Я смог заставить sed менять все wxT(...) на #wxT(...)#, затем удаляю #wxT( и )#
Не могу заставить работать так:
меняем wxT("...") на #wxT("...")# затем меняю #wxT(" на " и ")# на "

Надо чтобы, например:

Код: [Выделить]
echo wxT(")") | sed 's/wxT([^)]*)/#/g;/#wxT(/s/)#//g;s/#wxT(//;s/.c_str()//g'
вернуло ")"

Подскажите, пожалуйста, как (можно любой синтаксис, как для cmd так и для bash)?
...
Рейтинг: 0 / 0
sed замена
    #38229281
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перл - читаем стд. вход, убираем одну из ф-ций, заливаем в стд. вывод
while(<>){
s/wxT\("[^"]*"\)//g;
print;
}
...
Рейтинг: 0 / 0
sed замена
    #38229491
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробую иначе

Код: sql
1.
echo wxT("1+2+3 (6)"); _("bingo (ya)")   | sed "s/wxT\(.*\))/#&#/"


получаю
#wxT("1+2+3 (6)"); _("bingo (ya)")#
а хочется
#wxT("1+2+3 (6)")#; _("bingo (ya)")
...
Рейтинг: 0 / 0
sed замена
    #38229616
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в итоге нечто рабочее:
Код: sql
1.
for /R %%i in (*.cpp *.h) do sed -i "s/wxT(\(.[^\"]*\)\")/#-#\1\"#-#/g;s/#-#//g;s/.c_str()//g" %%i
...
Рейтинг: 0 / 0
sed замена
    #38229678
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maximandв итоге нечто рабочее:
Код: sql
1.
for /R %%i in (*.cpp *.h) do sed -i "s/wxT(\(.[^\"]*\)\")/#-#\1\"#-#/g;s/#-#//g;s/.c_str()//g" %%i


а чего сразу матч на пустую строку не менять
s/.c_str()//g - как тут?

сразу без зарешеченного минуса?
s/wxT(\(.[^\"]*\)\")/\1\"/
...
Рейтинг: 0 / 0
sed замена
    #38229698
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или дефайном. Это же С-С++?
...
Рейтинг: 0 / 0
sed замена
    #38229733
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakov,

Спасибо и точно.
Код: sql
1.
sed "s/wxT(\(.[^\"]*\)\")/\1\"/g"


вполне справляется за редким исключением.
...
Рейтинг: 0 / 0
sed замена
    #38229768
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s/wxT(\s*\(\"[^\"]*\"\\s*))/\1/

Или даже так. Обе кавычки - в захватываемое скобками выражение,между скобкой и кавычкой с двух сторон - возможные пробельные цепочки. Для надежности.
...
Рейтинг: 0 / 0
sed замена
    #38229891
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakov,

ещё +100500 спасибов! Вот синтаксис для виндового сида:

Код: sql
1.
echo wxT(")"); _("1236(6)"); wxT( "123" ) | sed "s/wxT( *\(.[^\"]*\" *\))/\1/g" 



Это выражение ошибается только на строках с маскированными кавычками типа:

Код: sql
1.
html_+= wxString::Format(wxT("\" text=\"%s\" ")



и не могу заставить первую кавычку учитывать....
...
Рейтинг: 0 / 0
sed замена
    #38230278
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maximand, следующий скрипт
Код: plaintext
1.
2.
s/\\\"/\x03/g
s/wxT(\s*\(\"[^\"]*\" *\))/\1/g
s/\x03/\\\"/g

на первый взгляд правильно жует вот такой тест.

Код: plaintext
1.
2.
3.
4.
5.
ddddddddd
d   wxT("rrr\"rr")          wxT(   "rrr\"rr")
dddddddddddd
wxT("rrr\"rr"       )

ddddddd

Символы 1...8 в нормальных текстах не встречаются..... их можно использовать как временную замену эскейп - последовательностей....

желания упаковывать в однострочник - нет, только глаза ломать, perl - никак не менее удобен, те же регекспы в нормальном, с процедурами, переменными и циклами языке.

sed взят из виндового несвежего git-a. перл и тактикль - там же, рядом.
...
Рейтинг: 0 / 0
sed замена
    #38230287
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
html_+= wxString::Format( wxT( "\" text=\"%s\" " )
=>
html_+= wxString::Format("\" text=\"%s\" "
...
Рейтинг: 0 / 0
sed замена
    #38231507
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир,

Спасибо. Я уже немного подразобрался с рег выражениями.
По sed'у всё логично, но есть странное но.

Код: sql
1.
echo wxT( "12\"3" ) | sed "s/1/_/g"


выдаёт пустую строку вместо ожидаемого wxT( "_2\"3"), хотя эхо нормально выводит.
Поэтому мне вообще не поменять \" на хоть что угодно.
Ерунда какая-то.
...
Рейтинг: 0 / 0
sed замена
    #38232086
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам надо разобраться, как вставлять скобки слэши и кавычки в качестве элементов строки - аргумента echo.

Код: php
1.
echo 22113334444666 | sed 's/1/_/g'
...
Рейтинг: 0 / 0
sed замена
    #38232105
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо беспокоится, сделайте тестовый файл и тестовый sed - скрипт.
И начинайте жить. И станет счастье.
(вопрос о том, на зачем он вообще нужен, sed, оставим без рассмотрения)
...
Рейтинг: 0 / 0
sed замена
    #38232608
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир,

Спасибо за советы. Победа!

Ваш шаблон + мой цикл благополучно обрабатывает тестовый файл.

Код: sql
1.
for /R %%i in (*.cpp *.h) do sed -i -f template.sed %%i



Код: sql
1.
2.
3.
s/\\\"/\x03/g
s/wxT(\s*\(\"[^\"]*\" *\))/\1/g
s/\x03/\\\"/g
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / sed замена
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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