如何用Python re模块捕获fstab中/tmp挂载点的挂载选项
解决Python re匹配fstab中非注释/tmp挂载选项的方案
可行正则表达式与代码实现
直接通过行首排除注释行,定位挂载点为/tmp的行,捕获对应的挂载选项:
import re fstab_content = """ /dev/mapper/rootvg-lv_home /home ext4 nosuid,nodev 1 2 /dev/mapper/rootvg-lv_opt /opt ext4 nosuid,nodev 1 2 #/dev/mapper/rootvg-lv_tmp /tmp ext4 nosuid,noexec 1 2 /dev/mapper/rootvg-lv_tmp /tmp ext4 nosuid,nodev 1 2 /dev/mapper/rootvg-lv_var /var ext4 nosuid,nodev 1 2 """ # 正则逻辑:匹配非注释行 + 挂载点/tmp + 捕获第四个字段(挂载选项) pattern = r'^[^#]\S+\s+/tmp\s+\S+\s+(\S+)' match_result = re.search(pattern, fstab_content, re.MULTILINE) if match_result: print(match_result.group(1)) # 输出:nosuid,nodev
正则表达式说明
^[^#]:行首第一个字符不为#,直接排除注释行\S+:匹配设备路径(非空白字符序列)\s+/tmp:匹配设备与挂载点之间的任意空白,精准定位挂载点/tmp\s+\S+:匹配挂载点与文件系统类型之间的空白,以及文件系统类型(如ext4)\s+(\S+):匹配文件系统与挂载选项之间的空白,捕获挂载选项(非空白字符序列,符合fstab选项格式)
为什么避开后行断言
Python的re模块对后行断言((?<=...))有固定长度限制,无法匹配长度不固定的前置内容,因此直接从行首正向匹配的方案更稳定,也更易维护。
内容的提问来源于stack exchange,提问作者Foklan
相关产品推荐
相关产品推荐

