如何使用sed正则表达式按行替换config.txt中的对应IP地址
替换方案
错误原因分析
你之前写的sed命令存在两个核心问题:
- 正则语法不合法:量词
*不能作为匹配规则的开头,你写的*@\+:*没有匹配IP段的逻辑 - 替换段错误使用通配符:sed替换规则的右侧为普通字符串,
*不会作为通配符生效
单条内容测试命令
如果你需要测试单条字符串的替换效果,可以用以下命令:
echo "f03889d9abcb6a16155411bb8e0a34dddb5c8e4c@192.168.3.4:26601" | sed 's/@[^:]\+:/@10.0.4.5:/'
正则逻辑说明:@[^:]\+: 匹配@符号之后、第一个:符号之前的所有字符(也就是动态IP段),直接替换为目标IP即可。
批量按行替换命令
要实现config.txt每行的IP自动替换为ip.txt对应行的IP,有两种常用实现方式:
awk实现(更简洁)
awk 'NR==FNR{ip[NR]=$0;next} {sub(/@[^:]+:/,"@"ip[FNR]":")}1' ip.txt config.txt
命令逻辑:
- 先读取ip.txt,将每行IP按行号存入数组
- 再读取config.txt,逐行替换IP段后输出结果
sed实现
paste ip.txt config.txt | sed -E 's/([^\t]+)\t(.*@)[^:]+:/\2\1:/'
命令逻辑:
- 用paste命令将两个文件的同行列用制表符拼接
- 用sed提取拼接行第一部分的新IP,替换原有IP段后输出
内容的提问来源于stack exchange,提问作者Rukmangathan
相关产品推荐
相关产品推荐

