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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Как экранировать „ ?“ не работает sed 's/ \?\./\?/g' когда пробел перед „?“ ?  (Прочитано 1228 раз)

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

adawdp

  • Автор темы
  • Гость
2015 Oct 11; 09:47 PM; Oakville, ON, Canada.

— Нужно заменить пробел и знак вопроса на просто знак вопроса в тексте.
— Например работает:
Код: (bash) [Выделить]
sed -i 's/\?\./?/g' 3pa3oK.txt
— И не работает:
Код: (bash) [Выделить]
sed -i 's/ \?\./?/g' 3pa3oK.txt
— Понятно, что можно чем-то, положим, „QwErTy“ явно не будет в тексте, заменить „?“ выполнить все необходимые замены, а потом в обратной последовательности „QwErTy“ заменить на „?“  :)

— Но как-то это не очень правильно…

— Должна же как-то экранироваться последовательность символов пробел и знак вопроса?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Я не очень понимаю необходимость символа после знака вопроса(«\.») который должен означать что после знака вопроса идет точка

Что касается конкретно заданного вопроса то:
Код: (bash) [Выделить]
sed 's/ ?/?/' textОбратите внимание что «\?» — это не знак вопроса, а специальный символ, мультипликатор, означающий присутствие предыдущего(того что перед ним) символа(или группы) 0 или 1 раз.
« Последнее редактирование: 12 Октября 2015, 09:11:02 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
2015 Oct 12; 10:20 AM; Oakville, ON, Canada.

— После оптического распознавания получается  текст вида (фрагмент имеющий отношение к знаку вопроса „?“ :
Код: (txt) [Выделить]
Word word … word ?
Word word … word ?.
Word word … qword?.
— Некачественный получается текст, очень плохой исходный материал. Потому я всячески пытаюсь его почистить.

— Сначала удаляю пустые строки, потом много пробелов заменяю на один пробел, удаляю непечатные символы и так далее, для этого я „смастерил :)“ скрипт. А в конце уже пытаюсь „шлифовать такие мелочи“ как пробел перед знаком вопроса.

— Естественно вот так всё работает после того как Вы указали:
Код: (bash) [Выделить]
mif@mif-Inspiron-530s:~$ echo Word ?. | sed 's/ ?\./?/'
Word?
mif@mif-Inspiron-530s:~$
— А я почему-то решил, что „?“ как специальный символ нужно экранировать и упорно сочинял комбинации с „\?“ …

— И вроде же читал документацию, но видимо недостаточно…  :(

Спасибо, Azure, выйду на пенсию и сразу возьмусь за программирование!  :)

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Ну если так, то я бы сделал для всех вариантов текста
Код: (bash) [Выделить]
sed 's/ \??\.\?/?/g'
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

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