How can I remove a Host entry from an ssh config f

2019-05-05 17:39发布

The standard format of the file is:

Host example
  HostName example.com
  Port 2222
Host example2
  Hostname two.example.com

Host three.example.com
  Port 4444

Knowing the host's short name, I want to remove an entire entry in order to re-add it with new details.

The closest I have got is this, except I need to keep the following Host declaration and the second search term will capture two many terms (like HostName):

sed '/Host example/,/\nHost/d'

标签: ssh sed
2条回答
我只想做你的唯一
2楼-- · 2019-05-05 18:25

My final solution (which is somewhat OSX orientated) was this. It's largely based on Cyrus' earlier answer.

sed < $SOURCE "/^$/d;s/Host /$NL&/" | sed '/^Host '"$HOST"'$/,/^$/d;' > $SOURCE

This is more resilient to HostName directives which aren't indented.

查看更多
beautiful°
3楼-- · 2019-05-05 18:40

With GNU sed:

host="example"
sed 's/^Host/\n&/' file | sed '/^Host '"$host"'$/,/^$/d;/^$/d'

Output:

Host example2
  Hostname two.example.com
Host three.example.com
  Port 4444

s/^Host/\n&/: Insert a newline before every line that begins with "Host"

/^Host '"$host"'$/,/^$/d: delete all lines matching "Host $host" to next empty line

/^$/d: clean up: delete every empty line

查看更多
登录 后发表回答