Как перечислить все файлы, где первая строка является пустой строкой

Я хотел бы найти все файлы Java, которые имеют пустую строку как первую строку файла. У меня есть следующее, которое просто производит первую строку (и имя файла) каждого файла в выходной файл "fileList.txt":

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

Однако я затем должен выполнить последующую обработку "fileList.txt" для нахождения пустых имен файлов.

Как я могу добавить, "если" условие к xargs так, чтобы это только произвело имя файла, если первая строка является пробелом?

0
задан 5 September 2018 в 02:08

2 ответа

Никакая потребность использовать | xargs, найдите имеет -exec флаг для выполнения команды при соответствии файлам. Кроме того, необходимо выйти *java или удар развернет аргументы и find будет жаловаться.

Это awk острота затем должна сделать то, в чем Вы нуждаетесь:

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

NR==1 выбирает просто первую строку. /^$/ соответствует пустой строке. print FILENAME печатает файл, который соответствует.

Если первая строка не действительно пуста, но содержит только пробел, можно изменить регулярное выражение в

/^\s*$/

где \s* соответствия 0 или больше пробельных символов.

3
ответ дан 28 October 2019 в 00:56

Вот альтернативное использование sed:

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

Обратите внимание, что это будет несколько неэффективно для больших количеств маленьких файлов, так как это вызывает sed однажды для каждого файла - однако это только читает одну строку каждого.

Обработать строки, которые пусты за исключением пробела, изменения /^$/ кому: /^[[:blank:]]*$/ или /^[ \t]*$/ (вкладка пространства).

1
ответ дан 28 October 2019 в 00:56

Другие вопросы по тегам:

Похожие вопросы: