2010-12-06 9 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/' 
+0

私はこの1つを本当に好きです。どのようにして最初のディレクトリの深さ内で作業するのですか? "The Fruit/Apple" - > "Fruit、The/Apple" – jmilloy

+0

ああ、そこに行って、私は\(。* \)/ \ 1を\ \)/ \ 1 – jmilloy

+0

find -mindepth 2 -type d | grep -o [^。/]。* | sed -e 's/^ \([^ /] * \)/ \ 1、/' |並べ替え| sed -e 's/\(。* \)、\/The \ 1 \ /' – jmilloy

1

このソリューションは動作しますが、愚かで、すべてのケースでは動作しません(例えば、二重にスペースがある)

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

プレースホルダとして代用する先頭のスペースは、すべてのディレクトリがトップに浮動するように思われます。 – William

+0

ああ。私はポストのために物事を簡素化しようとしました。私は指導者を引き剥がそうとしています。そして、先頭のスペースは無視されると私は思う。編集中... – jmilloy

+0

個人的には好きです... ls -d * | sed -r 's/^/\ t /' |ソート-b | sed -rの/^\ t// '...私はこれが動作すると信じています – William

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」に置き換えます。