sed 's / this / that /' - игнорирует g, но все равно заменяет весь файл - PullRequest
5 голосов
/ 02 июня 2010

, как сказал заголовок, я пытаюсь изменить только первое вхождение слова. Используя sed 's / this / that /' file.txt

хотя я не использую опцию g, он заменяет весь файл. Как это исправить .?

UPDATE:

$ cat file.txt 
  first line
  this 
  this 
  this
  this
$ sed -e '1s/this/that/;t' file.txt 
  first line
  this  // ------> I want to change only this "this" to "that" :)
  this 
  this
  this

Ответы [ 2 ]

6 голосов
/ 02 июня 2010

http://www.faqs.org/faqs/editor-faq/sed/

4,3. Как изменить только первое вхождение шаблона?

sed -e '1s/LHS/RHS/;t' -e '1,/LHS/s//RHS/'

Где LHS = это и RHS = это для вашего примера.

Если вы знаете, что шаблон не появится в первой строке, пропустите первый -e и оператор после него.

1 голос
/ 04 августа 2010

sed сам применяет редактирование через файл и в сочетании с флагом «g» редактирование применяется ко всем вхождениям в одной строке.

, например

$ cat file.txt 

  first line
  this this
  this 
  this
  this

$ sed 's/this/that/' file.txt 
  first line
  that  this
  that
  that
  that

$ sed 's / this / that / g' file.txt

  first line
  that  that <-- Both occurrences of "this" have changed
  that 
  that
  that
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...