使用bash替换.conf文件中的单个占位符

时间:2017-11-01 01:22:21

标签: linux bash shell sed

大家好,我现在还在学习bash,但我正在写作 用于安装Docker和CNTLM的工作脚本,因为我们在一些代理后面运行。

我有安装工作,但我正在努力在下面的cntlm.conf文件中更改2个变量占位符。

cnlm.conf

#
# Cntlm Authentication Proxy Configuration
#
# NOTE: all values are parsed literally, do NOT escape spaces,
# do not quote. Use 0600 perms if you use plaintext password.
#

Username    $MyUserName
Domain      NTADMIN
Password    $MyPassWord
# NOTE: Use plaintext password only at your own risk
# Use hashes instead. You can use a "cntlm -M" and "cntlm -H"
# command sequence to get the right config for your environment.
# See cntlm man page
# Example secure config shown below.
PassLM          93409221097752460192457192457999
PassNT          08992693829837928372938729387229
### Only for user 'testuser', domain 'corp-uk'
PassNTLMv2      02793865976487363876348763873467

# Specify the netbios hostname cntlm will send to the parent
# proxies. Normally the value is auto-guessed.
#
# Workstation   netbios_hostname

我已经能够改变

  • PassLM
  • PassNT
  • PassNTLMv2

将替换行与'sed'一起使用,但我无法从bashscript中使用的变量更改$ MyUserName和$ MyPassWord。

关于我如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:3)

有各种选择:

要在“模板”上使用sed替换它们并创建新文件,您可以这样做:

sed 's/\$MyPassword/MySuperPassword/' cnlm.conf > cnlm.new.conf

现在,如果您要替换为同一个文件并且您不知道密码的最后一个值,则可以执行以下操作:

sed -ri 's/^(Password *).*$/\1MySuperPassword/' cnlm.conf

如果您的新密码在shell变量中,那么您可以执行最后一个命令:

newPasswd="abcde" 
sed -ri "s/^(Password *).*$/\1${newPasswd}/" cnlm.conf

最后,如果要在同一命令中更改用户名和密码:

newUser="user123" 
newPasswd="abcde" 
sed -ri "s/^(Username *).*$/\1${newUser}/; s/^(Password *).*$/\1${newPasswd}/" cnlm.conf