Bash:在行尾查找带有尾随空格的文件

Posted

技术标签:

【中文标题】Bash:在行尾查找带有尾随空格的文件【英文标题】:Bash: find files with trailing spaces at the end of the lines 【发布时间】:2012-06-27 22:27:30 【问题描述】:

我正在寻找一个 bash 命令来查找每行末尾有尾随空格的文件。我对删除空格不感兴趣,只是对查找文件感兴趣。

【问题讨论】:

注意:虽然问题的措辞(在撰写本文时)明确要求在每一行上查找带有尾随空格的文件,但这一要求的不寻常导致在某些答案中 - 特别是投票最多的答案 - 查找包含 一个或多个 行且带有尾随空格的文件。 sed -n '/ \+$/p' 文件名 【参考方案1】:

查找包含尾随空格的文件。

find . -type f -exec egrep -l " +$"  \;

【讨论】:

虽然您可以只使用grep,但正如其他答案所证明的那样,使用find 可能仍然是一个好主意,如果您想更多地控制要检查的文件。,您可以通过使用+ 而不是\; 来终止-exec 主节点,使find 命令更有效——这将调用egrep(通常)一次所有文件名。 请注意,此答案会找到 至少 1 行带有尾随空格的文件。这绝对是有用的,并且可能是更常见的用例,但不是 OP 所要求的(至少正如他们的措辞所暗示的那样,“在 每个 行的末尾”)。跨度> 【参考方案2】:

如果目标是列出在一行或多行中有尾随空格的文件:

grep -r '[[:blank:]]$' .

要不打印行,只打印文件名,还要指定-l 选项。那是l,就像单词list一样,而不是数字1

【讨论】:

问题是“在每一行行的末尾” @Sorin 我猜这不是 OP 的意图,但我承认这个问题确实是这样说的,从字面上看...... @twalberg,这使得它成为一个不简单的问题,值得第三个几乎相同的答案 @Sorin 在这种情况下,grep -rL '[^[:blank]]$' 可能会工作...不匹配那个模式... OP 的问题,如果从字面上理解,我所知道的绝对没有现实世界的适用性。恕我直言,应该对其进行编辑以反映常见用例以及最受好评的答案。问题毕竟也是grep trailing whitespace 的最高谷歌搜索结果。对这样编辑问题有任何反对意见吗?【参考方案3】:

查找带有一个或多个尾随空格字符的文件:

find . -name "*" | xargs egrep ".* +$"

【讨论】:

我相信最初的问题是找到所有行都有尾随空格的文件。不过,最初可能只是措辞不好。 @Nit 它确实在正文中说得很清楚,一定是错过了,但问题标题可能模棱两可。 不过,扩展您的解决方案,egrep -m1 -v -l ".* +$" 应该找到所有在每一行都有尾随空格的文件,如果我没记错的话? 更简单的正则表达式:' $' 或同时包含制表符和空格:'[[:blank:]]$' 引起各种警告egrep: (path): Is a directory。请务必指定 -type f 仅将文件名传递给 grep。【参考方案4】:

可以选择列出其中不包含任何匹配项的文件;对行尾之前的空格以外的字符使用它和正则表达式。

grep -L '[^ ]$' *

要递归目录,请添加-r。要同时搜索其他空白字符,请使用字符类 $'[^ \t]$' 或 POSIX '[^[:blank:]]$' 作为正则表达式。

【讨论】:

做得很好。这实际上只返回所有行都有尾随空格的文件 - 除了一个例外:empty(零字节)文件也匹配。此外,使用*(不带-r)将导致子目录警告(如果有)。 -L 不符合 POSIX,但受到广泛支持,因为 GNU grep 和 BSD sed 都实现了它。 @mklement0 很好地了解了零大小的文件。您可以使用-s 来抑制有关目录的警告,或者如果您想遍历整个目录树(OP 对任务不明确),则可以使用-r .【参考方案5】:

使用ack(或ag):

ack -l ' \n'

注意:与其他一些答案一样,这将列出包含 一行或多行行且带有尾随空格的文件。

【讨论】:

【参考方案6】:

如果目标是在当前路径列出文件并带有尾随空格

grep -rli '[[:blank:]]$' .

【讨论】:

【参考方案7】:

如果问题是从字面上查找每行末尾都有空格的文件,那么这应该可以:

grep -rL '[^[:blank:]]$' .

-L 告诉grep 报告与该模式不匹配的每个文件,并且该模式正在寻找在换行符之前没有空白的行。

【讨论】:

【参考方案8】:

试试这个:

find . -type f -name "* "

【讨论】:

这将找到文件名末尾有空格的文件

以上是关于Bash:在行尾查找带有尾随空格的文件的主要内容,如果未能解决你的问题,请参考以下文章

IDEA去除行尾空格

如何使用正则表达式删除尾随空格?

Git diff -w 仅在行首和行尾忽略空格

如何在 Android Studio 中自动删除尾随空格?

无法删除 Windows 7 上带有尾随空格的文件夹 [关闭]

Git 仅忽略 Markdown 文件中的尾随空格