Используя sed, чтобы найти слово и заменить другое слово

Вам просто нужно прочитать его слева направо:

  • > file --> перенаправить все из stdout в file.(Вы можете себе представить, что у Вас есть ссылка, точка-точка из stdout на file)
  • 2>&1 --> перенаправить все вещи из stderr в stdout, который теперь указан на file.

Итак, вывод:

stderr --> stdout --> file

Здесь можно увидеть хорошую ссылку .

.

1
24.09.2014, 00:41
2 ответа

Вы можете sed выполнить поиск и замену таким образом.

$ sed 's/mode v/mode sv/g'

Пример

Допустим, у меня есть этот образец файла:

$ cat afile.txt 
mode v modev mode v
blah
blah blah modev mode
blah
modev mode v

Я могу использовать sed для поиска / замены этого файла и сохранения резервной копии следующим образом:

$ sed -i.bak 's/mode v/mode sv/g' afile.txt 

Теперь у меня есть 2 файла:

$ ls -ltr | grep afile
-rw-rw-r--. 1 slm slm      64 Sep 23 20:13 afile.txt.bak
-rw-rw-r--. 1 slm slm      67 Sep 23 20:15 afile.txt

С изменениями, внесенными в оригинал:

$ cat afile.txt
mode sv modev mode sv
blah
blah blah modev mode
blah
modev mode sv

ПРИМЕЧАНИЕ: Если вам нужно, чтобы это была гарантированная граница слова, вы можете добавить суффикс режима v в поиск с помощью \ b .

$ sed -i.bak 's/mode v\b/mode sv/g' afile.txt 
1
27.01.2020, 23:38

Ваше решение из комментария работает только в том случае, если режим является самым первым словом в строке и заменяет все после "mode" на "sv". Из вашего вопроса я считаю, что это не ваше намерение. Нет причин все усложнять, должен работать простой

sed 's/mode /mode s/g'

. Или

sed s/"mode "/"mode s"/g
1
27.01.2020, 23:38

Теги

Похожие вопросы