user1371264 Asked: 2017-11-30 08:18:29 +0800 CST2017-11-30 08:18:29 +0800 CST 2017-11-30 08:18:29 +0800 CST 列出根据特定内容行排序的文件 772 我有一个文件目录。每个文件中都有一行写着: # order: N 其中 N 是一个整数。我想根据那个 N 数列出目录中的所有文件(甚至将它们包含在包装脚本中)。这可能来自 bash 命令行吗? files sort 3 个回答 Voted Best Answer DopeGhoti 2017-11-30T08:27:31+08:002017-11-30T08:27:31+08:00 使用 GNU grep,并假设文件名不包含冒号或换行符: $ ls bar baz foo freeble quux $ cat ./* # order: 3 # order: 2 # order: 1 # order: 4 # order: 5 $ grep -m1 -EH '^# order: [0-9]+$' ./* | sort -n -k3 | cut -d: -f1 foo baz bar freeble quux RomanPerekhrest 2017-11-30T08:43:55+08:002017-11-30T08:43:55+08:00 使用单个 GNUawk进程: awk 'BEGIN{ PROCINFO["sorted_in"]="@val_num_asc" } /order: [0-9]+/{ a[FILENAME]=$NF; nextfile } END{ for(i in a) print i }' ./* Stéphane Chazelas 2017-11-30T08:49:55+08:002017-11-30T08:49:55+08:00 使用zsh,您可以根据这些行的内容定义全局排序顺序: byOrder() REPLY=$(grep '^# order:' < $REPLY) 然后将其用于例如: printf '%s\n' *(.no+byOrder) 或者 sorted_file_list=(*(.no+byOrder)) (还向.glob 限定符添加 a 以仅考虑常规文件(而不是目录、fifos、符号链接......))。
使用 GNU
grep
,并假设文件名不包含冒号或换行符:使用单个 GNU
awk
进程:使用
zsh
,您可以根据这些行的内容定义全局排序顺序:然后将其用于例如:
或者
(还向
.
glob 限定符添加 a 以仅考虑常规文件(而不是目录、fifos、符号链接......))。