如何在Bash中精确匹配fstab里的/var挂载行并提取第三列?
精确匹配/etc/fstab中挂载点为/var的行并提取第三列
方法1:使用awk直接匹配列(推荐)
awk是处理列格式文件的更可靠工具,直接判断第二列是否精确等于/var,然后打印第三列:
awk '$2 == "/var" {print $3}' /etc/fstab
这条命令会直接输出目标行的第三列(文件系统类型),完全不会误匹配/var/log、/var/tmp这类挂载点。
方法2:改进grep命令实现精确匹配
如果坚持用grep,需要通过正则锚定挂载点所在的第二列,确保只匹配独立的/var:
grep -E '^\S+\s+/var\s+' /etc/fstab | awk '{print $3}'
^\S+:匹配行首的非空白字符(即设备名部分)\s+/var\s+:匹配/var前后的空白字符,确保它是独立的第二列,不会匹配/var开头的子路径
原命令失效原因
你之前用的grep -w "$mountpoint"中,-w是匹配单词边界,但/不属于单词字符(单词字符指字母、数字、下划线),所以/var/log里的/var会被识别为一个“单词”的一部分,导致误匹配。只有精准定位到第二列,才能避免这种情况。
内容的提问来源于stack exchange,提问作者vijayedm
相关产品推荐
相关产品推荐

