Как использовать awk / sed для замены значения конкретной строки вместо всей строки. - PullRequest
0 голосов
/ 13 ноября 2018
cat phpmyadmin/config.inc.php | grep 'blowfish_secret'

Возвращаемое значение = $ cfg ['blowfish_secret'] = 'A-wImn {Ax [K5F7MQg.2Uh6D1ICU: C0fe';

grep 'blowfish_secret' config.php | awk -F "'" '{print $4}'

Возвращаемое значение = A-wImn {Ax [K5F7MQg.2Uh6D1ICU: C0fe

grep -n "blowfish_secret" phpmyadmin/config.inc.php | cut -d: -f 1

Возвращаемое значение = 17

Моя цель - заменить строку 17 'значением "A-wImn {Ax [K5F7MQg.2Uh6D1ICU: C0fe" "my_random_string" без замены всей строки. Есть ли способ достичь этого?

Буду признателен за любое предложение

1 Ответ

0 голосов
/ 13 ноября 2018

Попробуйте awk:

awk -v repl="my_random_string" '
    BEGIN {FS = OFS = "\047"}
    $2 == "blowfish_secret" {$4 = repl}
    1
' config.file

Используя одинарную кавычку в качестве разделителя полей, если 2-е поле является правой клавишей, замените 4-е поле."\047" в awk - это строка, содержащая один символ, одну кавычку.

Чтобы записать новое содержимое обратно в оригинал: выберите один из

awk -v ... config.file > tempfile && mv tempfile config.file
awk -v ... config.file | sponge config.file   # from the 'moreutils' package
gawk -i inplace -v ... config.file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...