如何列出第一行是空白行的所有文件

如何列出第一行是空白行的所有文件

我想查找所有以空白行作为文件第一行的 Java 文件。我有以下内容,它只是将每个文件的第一行(和文件名)输出到输出文件“fileList.txt”中:

find . -name *java | xargs head -n1 > fileList.txt

然而我需要对“fileList.txt”进行后期处理来找到空文件名。

我如何向 xargs 添加“if”条件,以便仅当第一行为空白时才输出文件名?

答案1

无需使用| xargs,find 有一个-exec标志,用于对匹配的文件执行命令。另外,您需要转义,*java否则 bash 将扩展参数并find发出警告。

这条awk命令应该可以满足你的需要:

find . -name '*java' -exec awk 'NR==1&&/^$/{print FILENAME}' {} \;

NR==1仅选择第一行。/^$/匹配空行。print FILENAME打印匹配的文件。

如果第一行不是真的很空但仅包含空格,您可以修改正则表达式

/^\s*$/

其中\s*匹配 0 个或更多空格字符。

答案2

以下是另一种使用方法sed

find . -name '*.java' -exec sed -n '/^$/F;q' {} \;

请注意,对于大量小文件来说,它的效率会有些低,因为它对sed每个文件调用一次 - 但是它只读取每个文件的一行。

要处理除空格之外的空行,请更改/^$//^[[:blank:]]*$//^[ \t]*$/(空格制表符)。

相关内容