在Bash脚本中提取含指定IP模式的文件行
在Bash脚本中提取包含指定IP的行
嘿,我懂你遇到的问题了——想用sed提取文件里包含192.168.1.1的行,但试了好几次没成功对吧?问题出在IP里的.上,它在正则表达式里是匹配任意单个字符的通配符,不是字面意义的点,直接用sed的话匹配逻辑会跑偏。
给你两个靠谱的解决方案:
方案1:用sed正确转义IP里的点
先把变量里的点转义成正则能识别的字面点,再用sed过滤:
var='192.168.1.1' # 转义变量中的每个点,让sed把它当成普通字符处理 escaped_var=$(echo "$var" | sed 's/\./\\./g') # -n 让sed只输出匹配的行,/pattern/p 负责打印匹配到的内容 body=$(sed -n "/$escaped_var/p" your_file.txt) # 查看最终提取结果 echo "$body"
方案2:用grep更省心(推荐)
如果允许用grep的话,直接用固定字符串匹配模式,不用折腾转义:
var='192.168.1.1' # -F 选项会把模式当作纯字符串,不解析正则规则,点就是普通的点 body=$(grep -F "$var" your_file.txt) echo "$body"
不管用哪种方法,最终都会得到你想要的两行内容:
this is line 1 192.168.1.1
this is line 4 192.168.1.1
内容的提问来源于stack exchange,提问作者Miguel.G
相关产品推荐
相关产品推荐

