我正在寻找更改一个文件内容,该内容重复两次,我想在同一文件中的第二个内容中添加额外的行
示例文件
User YOURNAME
IdentityFile ~/.ssh/YOURKEY
.
.
.
User YOURNAME
Installing
Installing
运行脚本后的示例输出
User adminuser
IdentityFile ~/.ssh/id_rsa
.
.
.
User adminuser
IdentityFile ~/.ssh/id_rsa
Installing
Installing
我可以使用以下命令更改user
andYOURKEY
sed
`sed- i s/"YOURNAME/adminuser"/g /root/.ssh/config`
`sed -i 's/YOURKEY/id_rsa/g' ff1`
但我无法插入IdentityFile ~/.ssh/id_rsa
下一行。
已编辑
附加信息****User adminuser
是行首有空格。这些文件每天都会同步,因此无法删除IdentityFile
行。同步后将被替换
最终编辑按要求工作
perl -i -ne 'next if /IdentityFile/;
s#YOURNAME#adminuser\n IdentityFile ~/.ssh/id_rsa#;
print' filename
答案1
只需删除所有情况IdentityFile
,然后再次显式添加它们:
$ perl -i -ne 'next if /IdentityFile/;
s#YOURNAME#adminuser\nIdentityFile ~/.ssh/id_rsa#;
print' file
$ cat file
User adminuser
IdentityFile ~/.ssh/id_rsa
.
.
.
User adminuser
IdentityFile ~/.ssh/id_rsa
Installing
Installing
跳过next if /IdentityFile/
任何匹配的行IdentityFile
。将会用、换行符和行s#YOURNAME#adminuser\nIdentityFile ~/.ssh/id_rsa#
替换任何实例。最后打印所有行。YOURNAME
adminuser
IdentityFile
print
答案2
部分问题是您的模板不一致:第一次出现有一条IdentityFile
线,而第二条线则不是。您可以通过首先删除现有IdentityFile
行,然后添加所需的行来使其保持一致。
要删除行:
sed -i '/^IdentityFile /d' filename
要添加行,您可以sed
通过以下方式执行此操作匹配线User
,以及追加一条线,例如
sed -e '/^User /'a'\
IdentityFile ~/.ssh/id_rsa' filename