2010-12-06 57 views
1

我列出的目录,我想以按名称排序,而忽视龙头“”,即输出应该是:UNIX命令 - 忽略“的”排序时

Apple 
The Banana 
Orange 

,而不是

Apple 
Orange 
The Banana 

这样做的最佳方法是什么?

回答

1
ls | sed -e 's/^The \(.*\)/\1, The/' | sort | sed -e 's/\(.*\), The$/The \1/' 
1

此解决方案,但是是傻,不会在任何情况下工作(例如有双空格)

find . -type d | grep -o "[^./].*" | sed 's/^The/ /' | sort | sed 's/ /The /' 
+0

不太确定这是否有效......您替换为占位符的前导空间似乎会导致所有这些目录浮动到顶部 – William 2010-12-06 05:24:48

+0

啊。我试图简化帖子的内容。我正在剥夺领先地位./并且只关心领先的。然后我认为领先的空间被忽略。现在编辑... – jmilloy 2010-12-06 05:28:25

2

其实我要去把那写下来。

我怀疑是下面会做你想要它做的事情:

ls -d * | sed 's/^The /\t/' | sort -b | sed 's/^\t/The /' 

我会解释。 ls -d *列出了所有的目录。 sed -r 's/^The /\t/'使用制表符(空格占位符)替换所有前导的“The”,sort -b排序,忽略前导空格(制表符),并且sed 's/^\t/The /'再次用“The”替换所有这些前导制表符。