2010-12-06 56 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」替換所有這些前導製表符。