我正在寻找一条bash命令来查找每行末尾带有空格的文件。我不想删除这些空格,只是想找到这些文件。
查找具有尾随空格的文件。
find . -type f -exec egrep -l " +$" {} \;
grep
也可以应付,但如果您想更好地控制要检查的文件,使用find
仍然是一个不错的选择。您可以通过使用+
而不是\;
来终止-exec
主命令,从而使find
命令更加高效 - 这将只调用一次egrep
(通常),并使用所有文件名。 - mklement0如果目标是列出具有一个或多个行尾空格的文件:
grep -r '[[:blank:]]$' .
如果不打印行,只打印文件名,还需指定-l
选项。这里的l
代表单词list
,而不是数字1
。
grep -rL '[^[:blank]]$'
可以解决问题... 它会搜索那些包含一行末尾不是空格的文件,并报告所有不符合该模式的文件... - twalberg查找带有一个或多个尾随空格字符的文件:
find . -name "*" | xargs egrep ".* +$"
egrep -m1 -v -l ".* +$"
应该能够找到所有每行末尾没有空格的文件,如果我没理解错的话? - EtheryteLIST=
find * | xargs egrep -m1 -v -l ".* +$" | xargs -I {} echo {};echo -e "$LIST""\n""
find *"
应该列出所有不符合两次标准的文件以及我们想要列出一次的文件。然而,似乎我在某个地方破坏了管道,所以无法对结果使用 uniq
。有什么想法吗? - Etheryte' $'
,或者包括制表符和空格的正则表达式:'[[:blank:]]$'
。 - Dennis Williamsonegrep: (path): Is a directory
。确保指定 -type f
以仅将文件名传递给 grep。 - Timo Tijhof如果目标是在当前路径中列出带有末尾空格的文件列表:
grep -rli '[[:blank:]]$' .
有一种选项可以列出不包含任何匹配的文件; 使用该选项和一个正则表达式,用于匹配行末之前的非空格字符。
grep -L '[^ ]$' *
要递归目录,请添加-r
。如果还要搜索其他空白字符,可以使用字符类$'[^ \t]$'
或正则表达式的POSIX'[^[:blank:]]$'
。
*
(不带-r
),则会针对任何子目录发出警告。
-L
不符合POSIX标准,但广泛支持,因为GNU grep和BSD sed都实现了它。 - mklement0grep -rL '[^[:blank:]]$' .
-L
告诉 grep
报告每个不匹配模式的文件,而该模式正在查找在换行符之前没有空格的行。
试一试这个:
find . -type f -name "* "