[Решено]изменение части следующей строки после шаблона

Пожалуйста помогите найти ошибку. В поиске много примеров, но они все ошибочные или не подходят к ситуации.
нужно найти [слово 1], перейти на следующую строку, найти слово слово 2 , заменить слово 2 на слово 4 .
скобки возле [слово 1] убрать нельзя, тк должно быть точное совпадение.
Номера строк не известны.
строк слово2 много. они могут быть разные или одинаковые. заменять нужно только после [слово 1] если найдено совпадение с ним и только один раз.

Имеем
[слово 1]
слово 2 блабла
слово 3
Надо
[слово 1]
слово 4 блабла
слово 3
тут где то ошибка ->>
#!/bin/bash
sed '/^[слово 1]/{n;s/^слово 2/слово 4/}' файл

/^[слово 1]/ соответствует строке, которая начинается с [слово 1]
n; Перейдите к следующей строке.
s/^слово 2/слово 4/ На следующей строке замените слово 2 на слово 4

сделано на основе этого https://fooobar.com/questions/5809167/changing-next-line-after-pattern-with-awk-or-sed
С уважением, .
Bendalf, условие задачи описано не конкретно.
Что конкретно нужно?
- заменить определенное слово на другое слово во всех строках?
- заменить определенное слово на другое слово только в определенных строках, например, содержащих определенное другое слово/маркер?
Например, заменить везде "слово 2" на "слово 4" ... ??? или что ???
... или что то другое?
Ошибки не исчезают с опытом - они просто умнеют
vasek
Что конкретно нужно?
нужно найти [слово 1], перейти на следующую строку, найти слово слово 2 , заменить слово 2 на слово 4 .
скобки возле [слово 1] убрать нельзя, тк должно быть точное совпадение.
Номера строк не известны.
С уважением, .
Bendalf
нужно найти [слово 1], перейти на следующую строку, найти слово слово 2 , заменить слово 2 на слово 4 .
А просто заменить слово 2 на слово 4 не канает? ...
И почему именно искать [слово 1]? ... может в строке, содержащей слово 2, имеется маркер, который делает эту строку, отличимой от других?
Ошибки не исчезают с опытом - они просто умнеют
vasek
может в строке, содержащей слово 2, имеется маркер,
строк слово2 много. маркера нет кроме строки [слово 1]. заменять нужно только после [слово 1] если найдено совпадение.
я с инета пробовал разные варианты.
сейчас ошибок не выскакивает, но содержимое файла не меняется.
С уважением, .
Имеем
cat ~/test.txt
[слово 1] dghjkl
слово 2 nybgfdss
слово 3 bmlhfeewfjlj
слово 2 qwedvbm,,,,,,
Применяя команду sed '/[слово 1]/n;0,/слово 2/{s/слово 2/слово 4/}' ~/test.txt
получаем
[слово 1] dghjkl
слово 4 nybgfdss
слово 3 bmlhfeewfjlj
слово 2 qwedvbm,,,,,,
Ошибки не исчезают с опытом - они просто умнеют
vasek
Применяя команду sed
всё получилось. спасибо.
можете пожалуйста обьяснить по шагам что делает как работает предложенная вами команда ?
в инете везде ^ , а вы не стали
что означает ноль после n , зачем там запятая после нуля ?
С уважением, .
вот в этом примере что не верно https://fooobar.com/questions/5809167/changing-next-line-after-pattern-with-awk-or-sed ?
первый ответ из четырех.
С уважением, .
Bendalf, нет времени для ликбеза - читай man sed .... ну и всегда гугли несколько источников, например это
Ошибки не исчезают с опытом - они просто умнеют
и man bash это от туда ^,;
Ошибки в тексте-неповторимый стиль автора©
 
Зарегистрироваться или войдите чтобы оставить сообщение.