"grep -v "^.$""は何をしますか?

"grep -v "^.$""は何をしますか?

データファイルをクリーンアップするスクリプトがあります。

注文する:

for i in `find /ddomain/data/shop12/ -mtime +15 -print|grep -v "^.$" |grep data-`

その機能なしでコマンドを実行してみましたが、grep -v違いはありませんでした。

私はそれが何をしているのか知りたいですgrep -v "^.$"。私はこのスクリプトを作成しておらず、オンラインで何も見つかりません。

答え1

grep -v "^.$"文字が1つしかない行を除いて、入力のすべての行を印刷します。

次のような用途に使用されるからです。

find /ddomain/data/shop12/ -mtime +15 -print|grep -v "^.$"

の出力から現在の作業ディレクトリ(相対パスを使用しているときに表示される)を削除すると仮定できます。.これはオプションを使用して簡単に達成できますが、ここでは絶対パスを使用するため、重複します。find.-mindepth 1find

data-後で名前に . があるファイルだけが検索されますがgrep data-、これも重複します。find1回の呼び出しに任意のロジックを配置できます。

find /ddomain/data/shop12/ -name '*data-*' -mtime +15 -print

また、-print基本的な操作であるdeleteを実行します。

find /ddomain/data/shop12/ -name '*data-*' -mtime +15

ファイルのみを探している場合は、-type f以下も追加してください。

find /ddomain/data/shop12/ -type f -name '*data-*' -mtime +15

答え2

他の人がすでに述べたように、単一のgrep -v '^.$'文字で構成される行をフィルタリングします(行の先頭(^)、文字(.)、行の終わり()で構成される行)。これを作成するもう1つの方法は、where、作成、および暗黙的(一致)$です。フルライン)。grep -vx .-x^$.

出力情報:

find /ddomain/data/shop12/ -mtime +15 -print

このコマンドの出力はfind通常次の行で構成されるため、これは意味がありません。

/ddomain/data/shop12/foo
/ddomain/data/shop12/foo/bar
...

この出力に単一の文字を含む行が含まれる唯一の方法は、同様の名前がある場合ですfoo<newline>X<newline>。これは完全に可能ですが、コマンドの意図ではありません。

このコマンドは、以下で(誤って)適用される可能性があります。

find . -mtime +15 -print | grep -v '^.$' | grep data-

目的はアイテムをgrepフィルタリングすることです.(これはgrep -Fvx .より適切かもしれません)。しかし、次のように書く方が合理的です。

find . ! -name . -path '*data-*' -mtime +15

最上位ディレクトリをフィルタリングするには、find /ddomain/data/shop12/次の手順を実行します。

find /ddomain/data/shop12/. ! -name . -path '*data-*' -mtime +15

またはfind実装が述語をサポートしている場合-mindepth

find /ddomain/data/shop12/ -mindepth 1 -path '*data-*' -mtime +15

答え3

.結果リストからディレクトリを削除しますfind。たとえば、説明する方が簡単です。

find . -print
.
./prova2
./prova2/prova2  

find . -print | grep -v '^.$'
./prova2
./prova2/prova2  

ご覧のとおり、最初のコードで.結果を見つけました。だからあなたはそれが取る行動のためにループに渡しますfor。 2番目のコードスニペットでは、結果
からそのディレクトリをスキップすることを決定してループに送信されません。.findfor

答え4

grep -v '^.$'文字が1つしかない行を除外します。

例:

echo "foo
> bar
> x" | grep -v '^.$'
foo
bar

関連情報