0

問題のある文字シーケンスを含むファイルの名前を出力する小さなスクリプトを書きました。

#!/bin/bash
# Finds all files in the repository that contain
# undesired characters or sequences of characters

pushd .. >/dev/null

# Find Windows newlines
find . -type f | grep -v ".git/" | grep -v ".gitmodules" | grep -v "^./lib" | xargs grep -l $'\r'

# Find tabs (should be spaces)
find . -type f | grep -v ".git/" | grep -v ".gitmodules" | grep -v "^./lib" | xargs grep -l $'\t'

# Find trailing spaces
find . -type f | grep -v ".git/" | grep -v ".gitmodules" | grep -v "^./lib" | xargs grep -l " $"

popd >/dev/null

これを 1 行にまとめます。つまり、grep で \r または \t または末尾のスペースを検索します。これを行うにはどうすれば正規表現を作成できますか? エスケープ文字には特別なシーケンスを使用する必要があるようです ( $'\X')。これらを組み合わせる方法がわかりません...

私は OS X を実行しており、BSD と GNU ベースのシステムの両方で動作するソリューションを探しています。

4

1 に答える 1

1
find . -type f | grep -E -v ".git/|.gitmodules|^./lib" | xargs grep -E -l '$\r|$\t| $'

'$ \ r | $ \t|かどうかわからない $'はそのように引用されて機能しますが、私のシステムでの簡単なテストでは機能しているように見えました。

-E(拡張reg-exp)をgrepに使用しています。これにより、複数の検索ターゲットを「OR」することができます。

古いUnix-enは-Eオプションをサポートしている場合とサポートしていない場合があるため、それを示すエラーメッセージが表示された場合は、すべてgrep -Eを。に置き換えてegrepください。

これがお役に立てば幸いです。

于 2012-06-09T04:05:52.077 に答える