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

我想将它组合成一行,即通过 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,它允许将多个搜索目标“或”在一起。

较旧的 Unix-en 可能支持也可能不支持 -E 选项,因此如果您收到一条错误消息标记该选项,请将所有内容替换grep -Eegrep.

我希望这有帮助。

于 2012-06-09T04:05:52.077 回答