заменить строку с помощью sed - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть строка, как показано ниже.Используя sed, я хочу заменить детализацию значения после имени: «пользователь», а также пароль на «66666» Строка ввода:

        name: "user"
        value: "55555"
        username: "test"
        value: "77777"
        password : "55555"

Ожидаемый результат:

        name: "user"
        value: "66666"
        username: "test"
        value: "77777"
        password : "66666"

Я пробовал ниже, ноне работалЭто только замена пароля, но не значение после имени

sed -i -e 's/\(password\|name: "[^"]*"{\n}value\): "[^"]*"/\1: "66666"/' test.txt

1 Ответ

0 голосов
/ 27 февраля 2019

Попробуйте:

sed -e '/name: *"user"/{' -e ':a;' -e 'N;/password *:/!ba;' -e 's/\(value *: *\)"[^"]*/\1"66666/;s/\(password *: *\)"[^"]*/\1"66666/;}' test.txt
        name: "user"
        value: "66666"
        username: "test"
        value: "77777"
        password : "66666"

sed - это потоковый редактор, по умолчанию он читает и обрабатывает каждую строку отдельно.
Здесь я использовал N, чтобы прочитать и добавить следующую строкуи замените содержимое в нем.
Я удалил переключатель -i, чтобы вы могли сначала протестировать его на оболочке, а затем добавить его обратно, когда результаты будут удовлетворительными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...