是否有一种有效的方法对文件进行排序,同时忽略出现在某些行开头的字符串?
例如,假设我有一个这样的文件列表:
FileAardvark
FileBee
N-FileBear
N-FileCat
FileZebra
我想在忽略" N - "时排序,所以排序后的结果将是
FileAardvark
N-FileBear
FileBee
N-FileCat
FileZebra
我不需要直接编辑线条,否则我可以直接删除N - '从文件完全。我最初的想法是使用' N - '作为sort
的分隔符,但由于' N - '是多个字符,因为那时我需要的列号因行而异。
在我的特定情况下,碰巧所有字符串都以相同的术语开头(例如,在示例中,一切都有"文件"在开头)我需要对整个字符串进行排序剩下的一行,所以我最终使用了这个sed
/ sort
链,这给了我想要的结果:
sed -e 's/File/\x06/g' | sort -t$'\x06' -k2 | sed -e 's/\x06/File/g'
但是,我不能依赖于与排序相关的所有字符串开头的重复序列,那么如何以更一般的方式完成此操作呢?
答案 0 :(得分:3)
简单的方法是在字段前面添加N-
前置字段,对该字段进行排序,然后将该前缀删除。
使用GNU sed(拥有-r
;使用MacOS或其他现代BSD sed
替换-E
):
sed -r -e 's/^((N-)?([^ ]*))/\3 \1/' <<<"$str" | sort | sed -r -e 's/[^ ]+ //'
...这与通过修改时间对文件进行排序的首选方法非常类似 - 它将修改时间放在NUL分隔的流中的每个名称之前(因为NUL是文件中不存在的唯一字符&# 39; s pathname),按该初始字段排序,然后将其剥离。