我正在尝试使用以下命令:
awk '/dev-api2\.company-private/{p=NR} p && NR==p+2 && /^HostName/{
$0="HostName 1.1.1.1"; p=0} 1' ~/.ssh/config > $$.tmp && mv $$.tmp ~/.ssh/config
现在我想替换以下内容:
dev-api2 with $shn
1.1.1.1 with $privateip
但是现在当我运行awk命令时它什么也没做。
这些是变量的值:
shn=dev-api2
privateip=3.3.3.3
答案 0 :(得分:2)
您需要使用动态正则表达式而不是文字正则表达式:
awk -v shn="$shn" -v privateip="$privateip" '
$0 ~ shn "\\.company-private" { p = NR }
p && NR == p + 2 && /^HostName/ { $0 = "HostName " privateip; p = 0 } 1'
而不是/regex/
,请使用$0 ~ "string"
。该字符串将被评估并转换为正则表达式,因此您需要双重转义\\.
答案 1 :(得分:-1)
使用\“:
awk "/dev-api2\.company-private/{p=NR} p && NR==p+2 && /^HostName/{
$0=\"HostName 1.1.1.1\"; p=0} 1" ~/.ssh/config > $$.tmp && mv $$.tmp
~/.ssh/config