Все вхождения регулярного выражения удаляются без использования «глобального» модификатора

У меня есть следующий текст в файле sentence.txt

Linux относится к семейству Unix-подобных компьютерных операционных систем, которые используют ядро ​​Linux.
Linux может быть установлен на самых разных компьютерных аппаратных средствах: от мобильных телефонов, планшетных компьютеров и игровых консолей до мейнфреймов и суперкомпьютеров. Linux преимущественно известен тем, что использует его на серверах.
Он имеет долю рынка на рынке от 20 до 40%.
Большинство настольных компьютеров работают либо в Microsoft Windows, либо в Mac OS X, а Linux – от минимума примерно 1-2% рынка настольных компьютеров до максимума в 4,8%.
Однако настольное использование Linux становится все более популярным в последние годы, отчасти благодаря популярным дистрибутивам Ubuntu, Fedora, Mint и openSUSE, а также появлению нетбуков и смартфонов с встроенным Linux.
Linux может быть установлен на самых разных компьютерных аппаратных средствах: от мобильных телефонов, планшетных компьютеров и игровых консолей до мейнфреймов и суперкомпьютеров.

В этом тексте повторяются 2 предложения. Это последнее предложение. На самом деле я просто скопировал второе предложение в конец текста, чтобы у меня было 2 появления mobile phones

 ~$ grep mobile sentence.txt Linux can be installed on a wide variety of computer hardware, ranging from mobile phones, tablet computers and video game consoles, to mainframes and supercomputers. Linux can be installed on a wide variety of computer hardware, ranging from mobile phones, tablet computers and video game consoles, to mainframes and supercomputers. 

Затем мне было интересно, какое возникновение будет удалено с помощью следующего регулярного выражения:
[^.]*mobile phones[^.]*\.
Я считаю, что последнее событие должно быть удалено из-за слежения за спиной. Чтобы проверить это предположение и мое понимание, я применил следующее:

 :~$ sed 's/[^.]*mobile phones[^.]*\.//' sentence.txt > sentence2.txt 

Обратите внимание, что я не использовал g так, чтобы он заменил найденное первое обнаружение (я думаю, что это будет последнее предложение).
Но я вижу, что оба они удалены!

 ~$ grep mobile sentence2.txt ~$ 

Что я здесь делаю неправильно? 1) Является ли мое понимание регулярного выражения последним предложением в первую очередь неправильным? 2) Почему оба предложения удалены без g ?

One Solution collect form web for “Все вхождения регулярного выражения удаляются без использования «глобального» модификатора”

Ваше понимание было бы правильным, если регулярное выражение было применено к файлу в целом. Это не так, как sed rolls: он работает по строкам вместо этого. Таким образом, g модификатор будет вступать в игру только в том случае, если ваше регулярное выражение может совпадать несколько раз в одной строке . В вашем случае замена была применена только один раз для каждой строки, поэтому, естественно, оба экземпляра были удалены.

Нарисуйте весь файл и увидите разницу:

 perl -p0777e 's/[^.]*mobile phones[^.]*\.//' sentence.txt > sentence2.txt 
  • Поиск шаблона для нескольких файлов и замена подчасти во всех случаях
  • Добавление слова в конце строки с sed
  • Вырезать определенную часть столбца из файла csv
  • Передача команды sed для открытия команды
  • Удалить до заданного символа, начиная с заданной строки
  • Обновите или добавьте JAVA_HOME с sed
  • поместите вкладку перед каждой выходной строкой на AIX / ksh
  • Использование sed / awk для изменения слов между двумя шаблонами
  • Скрипт Sed / awk для нестандартного журнала доступа Apache (Oracle Weblogic)
  • многострочная замена заменяет предыдущий вывод
  • Более сжатые методы для обертывания файла, чем использование sed
  • Несколько команд sed в файле
  • Interesting Posts

    Выполните команду в течение определенного времени и затем прервите, если время превышает

    Сценарий Python для выключения системы не работает в cron

    Инструменты tslib ничего не рисуют на экране

    Проблемы NetworkManager в Arch Linux

    План 9 из книги Bell Labs

    Как остановить обычных пользователей от «Переключить пользователей»

    Нет знака «$» или «#» после входа в Solaris 10 с Putty

    Как найти слово после заданного шаблона с помощью разреза?

    Объединить PDF-файлы, но увеличить число PDF-страниц, чтобы быть равномерным количеством страниц

    Является ли терминал или оболочка ответственными за действия нажатий клавиш?

    Linux Web Kiosk

    Выбор несуществующих файлов с подстановочным знаком / регулярным выражением

    Проблема: ничего не предоставляет libcrypto.so.10 () (64 бит), необходимый Percona-Server-client-57-5.7.10-3.1.el7.x86_64

    Могу ли я настроить оболочку для печати STDERR и STDOUT в разных цветах?

    Эффективное обнаружение файла / каталога на основе ключевого слова

    Linux и Unix - лучшая ОС в мире.