将DHCP主机定义多行格式转单行?sed无法实现换行替换
DHCP主机配置条目格式转换方案
需求说明
需要将DHCP主机定义文件中的跨行条目:
host mx { fixed-address 10.0.1.161;
转换为单行格式:
host mx - fixed-address 10.0.1.161;
要求输出至标准输出(stdout),不原地修改原文件。注:sed无法直接实现该需求,因其原生不支持跨行的换行符替换操作。
实现方法
方法1:使用awk
awk可以轻松处理跨行文本匹配与拼接,执行以下命令:
awk '/host.*{/{sub(/\{/,"-"); buf=$0; next} /fixed-address/{print buf, $0}' 你的DHCP配置文件名
- 逻辑说明:
- 匹配到含
host和{的行时,把行尾的{替换成-,将该行内容存入临时变量buf,然后跳转至下一行。 - 匹配到含
fixed-address的行时,将buf中的内容与当前行拼接后打印。
- 匹配到含
方法2:使用Perl单行命令
Perl支持跨行正则匹配,适合快速处理这类文本转换:
perl -0pe 's/host (\S+) {\n fixed-address (.*?);/host $1 - fixed-address $2;/g' 你的DHCP配置文件名
- 逻辑说明:
-0参数让Perl读取整个文件内容(跨行处理),-p自动循环输出处理后的内容,-e指定执行的正则替换逻辑。- 通过正则匹配跨行的host条目结构,将其替换为目标单行格式。
内容的提问来源于stack exchange,提问作者LetMeSOThat4U
相关产品推荐
相关产品推荐

