如何使用awk / sed替换特定行的值而不是整个行。

时间:2018-11-13 16:07:21

标签: shell awk sed

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 :(得分:2)

尝试awk:

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

使用单引号作为字段分隔符,如果第二个字段为右键,则替换第四个字段。 awk中的"\047"是一个包含一个字符和一个单引号的字符串。

要将新内容写回到原始内容:选择其中之一

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