Как я могу удалить запись Host из файла конфигурации ssh?
Стандартный формат файла:
Host example
HostName example.com
Port 2222
Host example2
Hostname two.example.com
Host three.example.com
Port 4444
Зная короткое имя хоста, я хочу удалить всю запись, чтобы заново добавить ее с новыми подробностями.
Самое близкое, что у меня есть, это то, за исключением того, что мне нужно сохранить следующую декларацию хоста, а второй поисковый термин будет содержать два многих термина (например, HostName
):
sed '/Host example/,/\nHost/d'
2 ответа
С GNU sed:
host="example"
sed 's/^Host/\n&/' file | sed '/^Host '"$host"'$/,/^$/d;/^$/d'
Выход:
Host example2 Имя хоста two.example.com Host three.example.com Порт 4444
s/^Host/\n&/
: Вставлять новую строку перед каждой строкой, начинающейся с "Host"
/^Host '"$host"'$/,/^$/d
: удалить все строки, соответствующие "Host $host", до следующей пустой строки
/^$/d
: clean up: удалить каждую пустую строку
Мое окончательное решение (которое в некоторой степени ориентировано на OSX) заключалось в следующем. Во многом это основано на предыдущем ответе Кира.
sed < $SOURCE "/^$/d;s/Host /$NL&/" | sed '/^Host '"$HOST"'$/,/^$/d;' > $SOURCE
Это более устойчиво к HostName
директивы, которые не имеют отступа.