fstabファイルの行を一致させる方法

fstabファイルの行を一致させる方法

/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設定を使用する代わりに、-vawkはタブに変換されません。\t

関連情報