選択した一部のディレクトリを除くディレクトリの識別

選択した一部のディレクトリを除くディレクトリの識別

シェルスクリプトを作成中に問題が発生しました。たとえば、ディレクトリとファイル情報のリストを含むファイルがある場合:

home/svdev/src/lib
home/dev/project/doc
home/server/etc
dev.dump/trunk/src
dev.dump/src/etc
etc/hosts
template.txt
admin/releases/tables

次に終わらないディレクトリやファイルがあることを確認したいと思います。そして開発ダンプ。したがって、与えられたデータに対して、最後の3つの項目がディレクトリ基準と一致するため、次のものを取得する必要があります。間違った私の出力に

答え1

次の目的で使用できますgrep

$ cat good
home/svdev/src/lib
home/dev/project/doc
home/server/etc

dev.dump/trunk/src
dev.dump/src/etc
$

$ cat bad
home/svdev/src/lib
home/dev/project/doc
home/server/etc

dev.dump/trunk/src
dev.dump/src/etc

etc/hosts
template.txt
admin/releases/tables
$

$ if grep -q -v -E '^home/|^dev\.dump/|^[[:space:]]*$' good; then echo false; else echo true; fi
true

$ if grep -q -v -E '^home/|^dev\.dump/|^[[:space:]]*$' bad; then echo false; else echo true; fi
false

grep私が使用している場合、これは「home /()で始まる行、またはdev.dump /()で始まる行を検索する」、またはオプションで空白^home/|^dev\.dump/|^[[:space:]]*$文字()を含む空白行を検索することを意味します。このオプションを使用すると、パターンが拡張正規表現として適用されます。このオプションは一致を反転し、パターンと一致しない行と一致します。 「良い」ファイルには反転パターンと一致する行がなく、「悪い」ファイルには行があります。このオプションを使用すると、出力が抑制されます。^|^|^[[:space:]]*$-Egrep-v-qgrep

一致する項目がある場合はgrep0 で終了し、一致する項目がない場合は 0 以外の値で終了します。私はシェルを使用して終了値をif確認し、grepそれに応じて対応するtrue/文字列を印刷しますfalse

答え2

以下を試すことができますgrep(1)if-statement

if grep -Evq '^(home|dev\.dump).*' file.txt ; then echo false; fi

関連情報