Замена текста по шаблону
Модератор: Модераторы разделов
-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Замена текста по шаблону
Нужно изменить текст в файле по шаблону. Тоесть найти подстроку в строке и заменить всю строку.
Нужна связка (x)Dialog (выбор фалйа) +bash.
Нужна связка (x)Dialog (выбор фалйа) +bash.
-
gorilych
- Сообщения: 14
- ОС: Debian sid
Re: Замена текста по шаблону
> найти подстроку в строке и заменить всю строку.
по подстроке bca заменяем всю строку на replaced:
$ echo -ne '1abc\n2bac\n3bca\n4cba\n5cab\n6acb\n'|sed '/bca/ c replaced'
1abc
2bac
replaced
4cba
5cab
6acb
остальное не понял.
по подстроке bca заменяем всю строку на replaced:
$ echo -ne '1abc\n2bac\n3bca\n4cba\n5cab\n6acb\n'|sed '/bca/ c replaced'
1abc
2bac
replaced
4cba
5cab
6acb
остальное не понял.
-
Poor Fred
- Сообщения: 1575
- Статус: Pygoscelis papua
- ОС: Gentoo Linux, FreeBSD
-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Re: Замена текста по шаблону
2gorilych
есть xDialog в котором можно выбрать файл, возвращается при этом полный путь к файлу. Вот надо насти строку в конфиг-файле в определенным пераметром и переписать ее добавив туда путь к файлу.
Короче нужно в файле preferences для IceWM изменять таким образом картинку на рабочий стол.
есть xDialog в котором можно выбрать файл, возвращается при этом полный путь к файлу. Вот надо насти строку в конфиг-файле в определенным пераметром и переписать ее добавив туда путь к файлу.
Короче нужно в файле preferences для IceWM изменять таким образом картинку на рабочий стол.
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Замена текста по шаблону
Код: Выделить всё
p=/path/to/file/with/image # получается от xdialog или откуда угодно
# ищем и заменяем
sed -ie "s/^ *DesktopBackgroundImage *=.*/DesktopBackgroundImage=\"$p\"/" /path/to/icewm/preferences
# если строки не было, или она была закомментирована (а это дело можно при желании учесть)
# то просто добавляем строку в конец файла:
grep '^ *DesktopBackgroundImage *=.*' /path/to/icewm/preferences >/dev/null || echo \
"DesktopBackgroundImage=\"$p\"" >> /path/to/icewm/preferencesдля учета sed-ом закомментированной строки можно использовать такое регулярное выражение:
Код: Выделить всё
^ *#* *DesktopBackgroundImage *=.*Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Re: Замена текста по шаблону
sash-kan писал(а): ↑20.01.2008 17:57Код: Выделить всё
p=/path/to/file/with/image # получается от xdialog или откуда угодно # ищем и заменяем sed -ie "s/^ *DesktopBackgroundImage *=.*/DesktopBackgroundImage=\"$p\"/" /path/to/icewm/preferences # если строки не было, или она была закомментирована (а это дело можно при желании учесть) # то просто добавляем строку в конец файла: grep '^ *DesktopBackgroundImage *=.*' /path/to/icewm/preferences >/dev/null || echo \ "DesktopBackgroundImage=\"$p\"" >> /path/to/icewm/preferences
для учета sed-ом закомментированной строки можно использовать такое регулярное выражение:Код: Выделить всё
^ *#* *DesktopBackgroundImage *=.*
не работает, ругается на неверный параметр s/^
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Замена текста по шаблону
возможно, параметр i надо отделить от e.
sed -i -e
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
gorilych
- Сообщения: 14
- ОС: Debian sid
Re: Замена текста по шаблону
я бы заменил
на
дабы у шелла не возникало илюзий по поводу использования звёздочек и т.д, а у sed - не возникало проблем со слэшами в пути до файла.
Да и опция -e здесь не нужна.
Разумеется, если в имени файла встретится знак процента, то опять возникнет проблема. Поэтому переменную $p можно переконвертить, заменив все / на \/, например так:
Разумеется, если в имени файла встретятся другие спец-символы, их тоже придётся заэкранировать.
Код: Выделить всё
sed -ie "s/^ *DesktopBackgroundImage *=.*/DesktopBackgroundImage=\"$p\"/" /path/to/icewm/preferencesна
Код: Выделить всё
sed -i 's%^ *DesktopBackgroundImage *=.*%DesktopBackgroundImage="'$p'"%' /path/to/icewm/preferencesдабы у шелла не возникало илюзий по поводу использования звёздочек и т.д, а у sed - не возникало проблем со слэшами в пути до файла.
Да и опция -e здесь не нужна.
Разумеется, если в имени файла встретится знак процента, то опять возникнет проблема. Поэтому переменную $p можно переконвертить, заменив все / на \/, например так:
Код: Выделить всё
p=$(echo $p|sed 's/\//\\\//g')Разумеется, если в имени файла встретятся другие спец-символы, их тоже придётся заэкранировать.
-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Re: Замена текста по шаблону
2gorilych
Попробую конечно и ваш рариант, но думаю, у меня может возникнуть такая же проблема с параметром s/
Подскажите как преюбразовать строку вида
в
Точно не знаю какие символы нужно еще экранировать, но возможно еще надо и символ " ' ".
Попробую конечно и ваш рариант, но думаю, у меня может возникнуть такая же проблема с параметром s/
Подскажите как преюбразовать строку вида
Код: Выделить всё
/mnt/geek/Music/Dr. Alban/Dr. Alban - It's my life(mix).mp3в
Код: Выделить всё
/mnt/geek/Music/Dr.\ Alban/Dr.\ Alban\ -\ It's\ my\ life\(mix\).mp3Точно не знаю какие символы нужно еще экранировать, но возможно еще надо и символ " ' ".
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Замена текста по шаблону
вот так например:
Код: Выделить всё
diesel@gfl-1150:~$ echo "/mnt/geek/Music/Dr. Alban/Dr. Alban - It's my life(mix).mp3" | sed -r -e 's!(\s|[()])!\\\1!g;'
/mnt/geek/Music/Dr.\ Alban/Dr.\ Alban\ -\ It's\ my\ life\(mix\).mp3-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Re: Замена текста по шаблону
Всем спасибо! Вопрос решен! Оценил возможности sed.
И на последок, где взять помощь на русском по sed, желательно (наверное всем чайникам на первых парах они требуются) с примерами.
И на последок, где взять помощь на русском по sed, желательно (наверное всем чайникам на первых парах они требуются) с примерами.
-
Evgueni
- Сообщения: 599
- ОС: Ubuntu ☹
Re: Замена текста по шаблону
Ну, например, в книге "Программное окружение Unix" Кернигана и Пайка. Да и фактически в любой книге по Unix - это азы (но мне больше нравится perl
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Замена текста по шаблону
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог