Я хотел бы найти все файлы Java, которые имеют пустую строку как первую строку файла. У меня есть следующее, которое просто производит первую строку (и имя файла) каждого файла в выходной файл "fileList.txt":
find . -name *java | xargs head -n1 > fileList.txt
Однако я затем должен выполнить последующую обработку "fileList.txt" для нахождения пустых имен файлов.
Как я могу добавить, "если" условие к xargs так, чтобы это только произвело имя файла, если первая строка является пробелом?
Никакая потребность использовать | xargs
, найдите имеет -exec
флаг для выполнения команды при соответствии файлам. Кроме того, необходимо выйти *java
или удар развернет аргументы и find
будет жаловаться.
Это awk
острота затем должна сделать то, в чем Вы нуждаетесь:
find . -name '*java' -exec awk 'NR==1&&/^$/{print FILENAME}' {} \;
NR==1
выбирает просто первую строку. /^$/
соответствует пустой строке. print FILENAME
печатает файл, который соответствует.
Если первая строка не действительно пуста, но содержит только пробел, можно изменить регулярное выражение в
/^\s*$/
где \s*
соответствия 0 или больше пробельных символов.
Вот альтернативное использование sed
:
find . -name '*.java' -exec sed -n '/^$/F;q' {} \;
Обратите внимание, что это будет несколько неэффективно для больших количеств маленьких файлов, так как это вызывает sed
однажды для каждого файла - однако это только читает одну строку каждого.
Обработать строки, которые пусты за исключением пробела, изменения /^$/
кому: /^[[:blank:]]*$/
или /^[ \t]*$/
(вкладка пространства).