/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
堅牢性を向上させるには、grepの代わりにawkを使用する必要があります。現在、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