Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: [РЕШЕНО] Удалить символ на заданном участке, sed  (Прочитано 3275 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Нужно удалить символ * в строке, но только в промежутке с 1-го по 3-й символ.
Пример:
$ 1*345*7
1345*7
« Последнее редактирование: 18 Марта 2011, 16:46:16 от RazrFalcon »
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: Удалить символ на заданном участке, sed
« Ответ #1 : 17 Марта 2011, 06:42:07 »
% cat list
1*345*789
***456789
123456789
1*3*5*7*9
**3*56789
1**45678*
*23******

% cat list | sed 's/^.../&\n/' | sed 's/\*//g; N; s/\n//'
1345*789
456789
123456789
13*5*7*9
3*56789
145678*
23******

А перл версия гораздо проще и понятнее:

perl -lne '($start, $end) = /^(...)(.*)/; $start =~s/\*//g; print "$start$end"' list
« Последнее редактирование: 17 Марта 2011, 07:05:44 от Мангуст »

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Удалить символ на заданном участке, sed
« Ответ #2 : 17 Марта 2011, 08:22:00 »
Хмм...
Какой то странный у вас sed, аж в 3-и части =/
Мне просто в QRegExp нужно впихнуть регулярное выражение, выполняющие то что было написано выше.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: Удалить символ на заданном участке, sed
« Ответ #3 : 17 Марта 2011, 08:28:15 »
Ну так в sed (который в 2-е части, если имеются в виду фильтры), или QRexExp? Это "несколько" разные вещи. Как составить регулярное выражение, чтоб оно удаляло не заданное количество символов в не заданных местах в заданной части строки, мне на ум не приходит. Возможно ли это вообще?

Если в С++, то выполняйте по аналогии с перл, делите строку, производите удаления в стартовой части (без всяких регулярных выражений), потом соединяйте.
« Последнее редактирование: 18 Марта 2011, 02:56:37 от Мангуст »

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Удалить символ на заданном участке, sed
« Ответ #4 : 17 Марта 2011, 08:43:47 »
Ясно, спасибо. Хотел именно односточный вариант  ;)
Пока буду пилить ваш пример.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн RandomNT

  • Любитель
  • *
  • Сообщений: 80
    • Просмотр профиля
Re: Удалить символ на заданном участке, sed
« Ответ #5 : 18 Марта 2011, 03:15:58 »
cat list.мангуста | sed -r 's/^([^\*]{0,2})\*(.*)$/\1\2/'
удалит одну звездочку если она есть в первых трех символах

 

Страница сгенерирована за 0.04 секунд. Запросов: 25.