Linux下如何用挂载点变量删除fstab文件中的指定行?
解决/etc/fstab中删除指定挂载点行的sed错误问题
错误原因
- 第一个sed命令报错,是因为
$MOUNTPOINT的值包含斜杠/,而sed默认用/作为匹配表达式的分隔符,导致路径中的/被识别为表达式结束,后续的m被当成未知命令。 - 第二个用
|作为分隔符的命令报错,是因为sed识别自定义分隔符时,需要在第一个分隔符前添加反斜杠\,直接写|会被当成无效命令。
可行解决方案
方案1:转义变量中的斜杠
先将变量里的/转义为\/,再执行sed命令:
# 转义挂载点中的斜杠 ESCAPED_MOUNTPOINT=$(echo "$MOUNTPOINT" | sed 's/\//\\\//g') # 删除匹配行 sed -i "/$ESCAPED_MOUNTPOINT/d" /etc/fstab
方案2:使用带反斜杠的自定义分隔符
选择一个不会出现在挂载点中的字符(比如#、@)作为分隔符,并且在第一个分隔符前加反斜杠:
sed -i "\#$MOUNTPOINT#d" /etc/fstab
方案3:用awk精准匹配挂载点列(更可靠)
直接匹配fstab的第二列(挂载点字段),避免误删包含相同路径字符串的注释行:
awk -v mp="$MOUNTPOINT" '$2 != mp' /etc/fstab > /tmp/fstab.tmp && mv /tmp/fstab.tmp /etc/fstab
内容的提问来源于stack exchange,提问作者Abdulrahman
相关产品推荐
相关产品推荐

