やりたいこと
- 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
おわりに
本投稿は、次の投稿の発展系となりますの♪
なにができるのか理解しなまま使っていたコマンドもございました。
すこしでも覚えたく存じますので、断片的ではございますがメモいたしました。
以上です。