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

У меня есть следующий текст в файле 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 ?

  • как изменить соответствия регулярному выражению с помощью sed или другого инструмента?
  • Обрезка одной части, если она равна другой части?
  • Как удалить все числа, окруженные <>
  • Есть ли способ использовать апострофы в командах sed?
  • Проблемы при попытке вывести цвета в bash
  • Найти и заменить строки в текстовом файле на выходе из другого файла
  • Искать значение только в одном столбце wo с помощью awk, sed или perl
  • Solaris использует генератор последовательности в начале каждой новой строки
  • One Solution collect form web for “Все вхождения регулярного выражения удаляются без использования «глобального» модификатора”

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

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

     perl -p0777e 's/[^.]*mobile phones[^.]*\.//' sentence.txt > sentence2.txt 
    Linux и Unix - лучшая ОС в мире.