ZSH: Globbing первые файлы N под путем в лексикографическом порядке

Можно использовать awk как это:

$ awk ' /^$/ { print; } /./ { printf("%s ", $0); } ' test

Или если Вам нужна дополнительная новая строка в конце:

$ awk ' /^$/ { print; } /./ { printf("%s ", $0); } END { print ""; } ' test

Или если Вы хотите разделить абзацы новой строкой:

$ awk ' /^$/ { print "\n"; } /./ { printf("%s ", $0); } END { print ""; } ' test

Эти команды awk используют действия, которые охраняют шаблоны:

/regex/

или

END

Следующее действие только выполняется, если шаблон соответствует текущей строке.

И ^$. символы имеют особое значение в регулярных выражениях, где ^ соответствует началу строки, $ конец и . произвольный символ.

7
29.08.2011, 21:33
1 ответ

Это - zsh, так действительно существует спецификатор шарика для этого.

echo *([1,42])         # The first 42 files in the current directory, in lexicographic order
echo **/*([1,42])      # The first 42 files in a depth-first traversal
echo **/*(od[1,42])    # The first 42 files in a breadth-first traversal

Другие спецификаторы, которые могли бы быть полезными, например, следующее выражение, включают точечные файлы (D), ограничивает регулярными файлами (.) и символьные ссылки (-) в регулярные файлы, и расширяется до пустого списка, если там не идет ни в какое сравнение (N):

echo *(-.DN[1,42])
11
27.01.2020, 20:16

Теги

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