Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用shell脚本替换用户名和密码_Shell_Unix_Sed_Scripting - Fatal编程技术网

如何使用shell脚本替换用户名和密码

如何使用shell脚本替换用户名和密码,shell,unix,sed,scripting,Shell,Unix,Sed,Scripting,如何更新shell脚本,将用户名“u1”替换为.txt文件中用户输入的任何值 'username' => "u1" 现行守则如下:- #!bin/bash echo "\nEnter Username to replace: " read name sed -i -e s/u1/"$name"/g /var/1.txt 请尝试使用“$name”而不是“$name” 最好的选择是使用sed-i-r sed -i -r 's/u1/'$name'/g' /var/1.txt 您可以

如何更新shell脚本,将用户名“u1”替换为.txt文件中用户输入的任何值

'username' => "u1"
现行守则如下:-

#!bin/bash
echo "\nEnter Username to replace: "
read name

sed -i -e s/u1/"$name"/g /var/1.txt
请尝试使用“$name”而不是“$name”

最好的选择是使用sed-i-r

 sed -i -r 's/u1/'$name'/g'  /var/1.txt
您可以尝试的另一个选项是将其保存到临时文件并将其移回

例如:

 sed 's/u1/'$name'/g' /var/1.txt > /tmp/temp

 mv /tmp/temp /var/1.txt

使用
sed
,我们可以将一条语句一分为二,并用所需的变量[here,$name]替换第二部分,而不是用
u1
硬编码脚本

sed-i“s”\(.*'username'=>\)\(.*\)\\\\\\$name\\'\\'\\'/var/1.txt

使用
awk
可获得如下相同结果:


awk-v name=“$name””/username/{gsub($3,\”“name”\)};1'/var/1.txt

带有-r的选项非常有效!非常感谢。在下一次迭代中,我将输入“u3”传递给“u2”(从上面代码的前一次执行中,值“u2”替换为“u1”)。这怎么办?我不完全理解你的要求。将sed放入循环中。另外,请更新我的答案,如果你得到了你想要的答案,我想替换输入中的“u1”或任何其他值示例:-“用户名”=>“u1”输入值->u2 o/p:-“用户名”=>“u2”代码重新执行:-“用户名”=>“u2”输入值->u3 o/p结果:-“用户名”=>“u3”你能把/var/1.txt的示例内容放进去吗?千万不要做
's/x/'$y'/'
,因为这样会使
$y
不带引号,并对shell进行解释。也不要做
cmd file>tmp;mv tmp文件
,因为如果/when
cmd
文件,它将摧毁原始文件。
-r
没有增加任何值。编写上述内容的更安全的方法是
sed-i's/u1/'“$name”/g'/var/1.txt
sed's/u1/'“$name”/g'/var/1.txt>/tmp/temp&&mv/tmp/temp/var/1.txt
,请注意,如果
$name
包含捕获组引用(例如
&
\1
)或regexp分隔符(例如
/)或者其他一些角色。请参见。如果我需要在$name的末尾添加逗号,我该如何处理?示例:-$name=管理员输出:-管理员,