🏹
Gitコマンド入門::さまざまなツール(Git Grep)第八十二回
みなさんこんにちは! 今回からは、Gitのツール関連を学習して行きますね。まだ、実際に使いこなしていない私ですが、まあ~開発経験だけは30年もあり、いっちょまえかな?(^▽^;) 今もコツコツやっていますので、それなりに、ツボは抑えているつもりですよ!
ということで、今回は検索コマンド、grep です!
今日の学習は、こちら!
7.5 Git のさまざまなツール - 検索
前回の記事はこちらから!
git本家本元の情報はこちらから!
いつも環境構築から!
$ mkdir func0082 && cd $_
$ git init
Initialized empty Git repository in /home/shiozumi/mygit/func0082/.git/
$ git add sample.php
$ git commit -m "1st"
[shiozumi@ovs-009 func0082]$ git log -p
commit 3bee1de60686ed73f8ada35bfe474257edfcfcf6 (HEAD -> master)
Author: Makoto Shiozumi <shiozumi@esmile-hd.jp>
Date: Wed Apr 14 10:54:05 2021 +0900
1st
diff --git a/sample.php b/sample.php
new file mode 100755
index 0000000..1ad19ae
--- /dev/null
+++ b/sample.php
@@ -0,0 +1,35 @@
+<?php
+
+$filename = tempnam('/tmp', 'zlibtest') . '.gz';
+echo "<html>\n<head></head>\n<body>\n<pre>\n";
+$s = "Only a test, test, test, test, test, test, test, test!\n";
+
+// 最大限の圧縮を指定して書きこみ用にファイルをオープン
+$zp = gzopen($filename, "w9");
+
+// 文字列をファイルに書きこむ
+gzwrite($zp, $s);
+
+// ファイルを閉じる
+gzclose($zp);
+
+// 読みこみ用にファイルをオープン
+$zp = gzopen($filename, "r");
+
+// 3 文字読みこむ
+echo gzread($zp, 3);
+
+// ファイルの終端まで出力して閉じる
+gzpassthru($zp);
+gzclose($zp);
+
+echo "\n";
+
+// ファイルをオープンし、内容を出力する (2回目)
+if (readgzfile($filename) != strlen($s)) {
+ echo "Error with zlib functions!";
+}
+unlink($filename);
+echo "</pre>\n</body>\n</html>\n";
+
+?>
sample.php は、こちらです!
git grep -n 'echo' sample.php
$ git grep -n 'echo' sample.php
sample.php:4:echo "<html>\n<head></head>\n<body>\n<pre>\n";
sample.php:20:echo gzread($zp, 3);
sample.php:26:echo "\n";
sample.php:30: echo "Error with zlib functions!";
sample.php:33:echo "</pre>\n</body>\n</html>\n";
- -n は、ファイルの行番号を出力
- 'echo' は、文字列の指定
- sample.php は、ターゲットのファイルです。
では、test.php も追加します!
$ git add test.php
$ git commit -m "2nd"
$ git log -p -1
commit 3071fcb63f49b0c2ec8bf1670b50d6c750281d7a (HEAD -> master)
Author: Makoto Shiozumi <shiozumi@esmile-hd.jp>
Date: Wed Apr 14 11:05:20 2021 +0900
2nd
diff --git a/test.php b/test.php
new file mode 100755
index 0000000..0247e92
--- /dev/null
+++ b/test.php
@@ -0,0 +1,16 @@
+<?php
+
+$zip = new ZipArchive();
+$filename = "./test112.zip";
+
+if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
+ exit("cannot open <$filename>\n");
+}
+
+$zip->addFromString("testfilephp.txt" . time(), "#1 This is a test string added as testfilephp.txt.\n");
+$zip->addFromString("testfilephp2.txt" . time(), "#2 This is a test string added as testfilephp2.txt.\n");
+$zip->addFile($thisdir . "/too.php","/testfromfile.php");
+echo "numfiles: " . $zip->numFiles . "\n";
+echo "status:" . $zip->status . "\n";
+$zip->close();
+?>
test.php は、こちらです!
勿論、git clone もこちらから可能です!
$ git clone https://github.com/shiozumi-esmile/20210414.git
// ファルダーが新規作成されます!
$ cd 20210414
git grep -n 'echo' test.php
$ git grep -n 'echo' test.php
test.php:13:echo "numfiles: " . $zip->numFiles . "\n";
test.php:14:echo "status:" . $zip->status . "\n";
git grep -n 'echo' sample.php test.php
sample.php:4:echo "<html>\n<head></head>\n<body>\n<pre>\n";
sample.php:20:echo gzread($zp, 3);
sample.php:26:echo "\n";
sample.php:30: echo "Error with zlib functions!";
sample.php:33:echo "</pre>\n</body>\n</html>\n";
test.php:13:echo "numfiles: " . $zip->numFiles . "\n";
test.php:14:echo "status:" . $zip->status . "\n";
git grep -n '</.*>' sample.php
正規表現もOK!
$ git grep -n '</.*>' sample.php
sample.php:4:echo "<html>\n<head></head>\n<body>\n<pre>\n";
sample.php:33:echo "</pre>\n</body>\n</html>\n";
git grep --count 'echo'
カウント数の表示
$ git grep --count 'echo'
sample.php:5
test.php:2
// echo 文字列にヒットした回数が、それぞれ、5回、2回
git grep -n -e '$zp' --and \( -e 'close' -e 'file' \)
$ git grep -n -e '$zp' --and \( -e 'close' -e 'file' \)
sample.php:8:$zp = gzopen($filename, "w9");
sample.php:14:gzclose($zp);
sample.php:17:$zp = gzopen($filename, "r");
sample.php:24:gzclose($zp);
$zp に加えて、 close か、file の文字列がある行がヒットします!
まとめ
今回は、さくっと、かる~い感じで学習しましたけど、いろいろやり始めると、かなり時間も掛かりそうですね。Git本家のドキュメントには、作業ディレクトリだけでなくコミット済みの全ツリーにもということですから、どちらかというと、現在のファイルよりも、過去ファイルの状態に対して、grep 検索するケースのメリットの方が、大きそうですね。
それでは、今回はここまで、お疲れ様でした!
Discussion