カテゴリー
Microsoft

Windows で Subversion ログからファイルのリストを作り、そのファイルを引数にグレップした時のポイントメモ

やりたいこと

  • Subversion のログから、更新したファイルのパスのリストを取得
  • 各パスのファイルを対象に、指定文字列でグレップ

使ったコマンド

  • svn diff: 更新したファイルのパスのリストを取得するのに
  • grep: パスのリストから拡張子でフィルタリングするのに、指定文字列でグラップするのに
  • sed: 最終行を削除するのに使用
  • awk: 指定列のみ抽出するのに、置換するのに
  • xargs: 出力したパスの1行を1引数として次のコマンドに渡すのに

対象となるファイルリスト生成

svn diff --summarize -r r4:HEAD | grep .sql > list.txt

対象リストを整形

加工前の内容

list.txt に書き出した内容は次のような形

$ cat list.txt
M       trunk¥src¥aaa¥feature1.sql
... 略 ...
M       trunk¥src¥ccc¥feature9.sql
Binary file (standard input) matches

不要な部分を削除、必要な部分だけ取り出し

# sed '$d': 最後の行のみ削除して出力
# awk '{print $2}': 2 列目を出力
# awk '{gsub(/¥¥/, "/"};print}': ¥ を / に置換して出力
sed '$d' list.txt | awk '{print $2}' | awk '{gsub(/¥¥/, "/"};print}'

ファイル出力

先ほどのコマンドの結果をファイル出力するには、> を使用します。

sed '$d' list.txt | awk '{print $2}' | awk '{gsub(/¥¥/, "/"};print}' > list_formatted.txt

対象リストの各項目であるファイルを対象にグレップ

# 大文字小文字を区別しないで `commit;` を含むファイル名を出力
cat list_formatted.txt | xargs grep -il 'commit;'

# 大文字小文字を区別しないで `commit;` を含まないファイル名を出力
cat list_formatted.txt | xargs grep -iL 'commit;'

実家には、次のコマンドを実行しましたわ♪

cat list_formatted.txt | xargs grep -il 'commit;' > commit_including.txt
cat list_formatted.txt | xargs grep -iL 'commit;' > commit_not_including.txt

おわりに

本投稿は、次の投稿の発展系となりますの♪

なにができるのか理解しなまま使っていたコマンドもございました。

すこしでも覚えたく存じますので、断片的ではございますがメモいたしました。

以上です。

コメントを残す