/etc/fstab
我们在文件中有以下行
/dev/mapper/vg_D /data/container xfs defaults 0 0
但是当我们尝试将行匹配为
LINE=/data/container
grep -qxF "$LINE" /etc/fstab || echo "line not in file !!!"
line not in line !!!
似乎与 grep -qxF
线路不匹配/data/container
我们哪里错了?以及如何搭配线路?
答案1
不要使用该-x
参数,它会尝试匹配整行
-x, --line-regexp
Select only those matches that exactly match the whole line. For a regular expression
pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $.
所以它只会匹配只包含/data/container
其他内容的行。
答案2
您应该使用 awk 而不是 grep 来提高鲁棒性,因为您当前的 grep 方法即使部分修复以消除-x
,即使您通过添加进一步修复它-w
仍然会产生错误匹配。将 grep 命令替换为:
awk -v line="$LINE" '$2==line{exit 1}' /etc/fstab
或者更好的是从 awk 中进行打印:
awk -v line="$LINE" '
$2==line { f=1; exit }
END { print (f ? "line inf file" : "line not in file"); exit !f }
' /etc/fstab
如果"$LINE"
可以包含反斜杠则使用:
line="$LINE" awk '$2==ENVIRON["line"]...'
例如,而不是line
使用 awk设置-v
,因此 awk 不会转换为制表符。\t