我正在尝试自动更新我的~/.ssh/config file
。当我做一个在线正则表达式测试时,它可以像我想的那样使用PCRE 2(所以perl 5。30.3兼容)在regex101上,但是当我尝试在本地机器上复制时,它失败了。
该命令使用正向后看来通读一个单词、一个换行符、四个空格、一个单词、一个空格,然后从该点开始替换直到行尾:cat ~/.ssh/config | perl -pe 's/(?<=c9\n\s{4}Hostname )ec2.+/TEST/g'
。
我的~/.ssh/config文件看起来像这样(仅作为示例,为了安全性而更改):
Host c9
Hostname ec2-xxx.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ssh/id_rsa2
使用上面的正则表达式,我希望输出如下所示:
Host c9
Hostname TEST
User ec2-user
IdentityFile ~/.ssh/id_rsa2
它在测试站点上工作,但当我在本地运行时,它一直工作到我在换行符后添加任何空格为止。那么
cat ~/.ssh/config | perl -pe 's/(?<=c9\n)/TEST/g'
给予
Host c9
TEST Hostname ec2-xxx.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ssh/id_rsa2
但下面的代码只是返回了未更改的输入。
cat ~/.ssh/config | perl -pe 's/(?<=c9\n )/TEST/g'
我已经在bash和zsh中进行了测试,并且我正在运行perl 5,版本30,subversion 3(v5)。30.3).感谢任何帮助.1:https://regex101.com
2条答案
按热度按时间zbwhf8kr1#
试试这个:
idfiyjo82#
使用
sed
查找Host c9
(通过/^Host c9$/
),然后在下一行(通过n
命令),替换主机名(通过s/Hostname ec2.*/Homename TEST/
):参见live demo。