Встала задача - перенести настройки с DHCP-сервера Windows на DHCP-сервер в Linux. Основные настройки можно перенести и вручную, а вот таблицу с привязками имени, MAC- и IP-адреса каждого компьютера переносить вручную мне было лень. Было лень настолько, что я принялся писать конвейер для командной строки, который преобразует мне всю таблицу из одного формата в другой.
Для начала я снял дамп настроек DHCP-сервера в Windows:
netsh dhcp server \\11.11.11.1 dump > dump.txt
Потом я перенёс этот файл в Linux, сменил его кодировку и после получаса мучений, наваял такой конвейер (для того, чтобы увидеть целиком, придётся, видимо, скопировать его и вставить в текстовый редактор):
grep "Dhcp Server" dump.txt | \ cut - -f8,9,10 -d" " | \ grep domain | \ cut -d. -f1-4 | \ sed -e 's/\"//g' - | \ sed -e 's/\(.*\) \(.*\) \(.*\)/\2 \1 \3/g' - | \ sed - -e 's/^\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)/\1\2:\3\4:\5\6:\7\8:\9/g' | \ sed - -e 's/:\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)/:\1\2:\3\4/g' | \ sed -e 's/\(.*\) \(.*\) \(.*\)/\thost \3 {\n\t\thardware ethernet \1;\n\t\tfixed-address \2;\n\t}/g' - \ > hosts.txt
Эта строчка находит в файле dump.txt строки вида:
Dhcp Server 11.11.11.1 Scope 11.0.0.0 Add reservedip 11.11.11.11 00AABBCCDDEE "computer.domain" "" "DHCP"
И переделывает их в строки вида:
host computer { hardware ethernet 00:AA:BB:CC:DD:EE; fixed-address 11.11.11.11; }
Которые записывает в текстовый файл hosts.txt.