Sed -i援助(bash)

时间:2014-04-09 13:06:20

标签: linux bash sed

我是Sed的新手,你可能会想象你可以早点迷路......

我在PHP页面中有以下变量,我正在尝试使用bash脚本进行更改:

$username='';

我想给它一个存储在$ myUsername中的扩展变量值,以便最终条目如下所示:

$username='someName';

我相信我接近以下,但似乎无法越过终点线......

sed -i 's/"$username = ''".*$/\$username = /"${myUsername}/"' /var/www/settings.php

感谢您的教育/帮助

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,例如使用这个改进的版本:

sed -i "s/\$username = ''/\$username = '$myUsername'/" file

请注意,要使用变量,您需要使用双引号。否则,该变量不会被扩展。另外,这就是为什么需要使用$username转义\$username,以避免将其解释为bash变量$username

测试

$ cat a
hello
$username = '';
bye

$ myUsername="bu"
$ sed "s/\$username = ''/\$username = '$myUsername'/" a
hello
$username = 'bu';
bye

$ myUsername="hello"
$ sed "s/\$username = ''/\$username = '$myUsername'/" a
hello
$username = 'hello';
bye

改进

您还可以通过捕获块来改进方法。它与\( block \)语法一起使用,并使用\1打印回来:

$ sed "s/\(\$username = \)''/\1'$myUsername'/" a
hello
$username = 'hello';
bye