ls -lで最後のk列だけを表示する方法は?

ls -lで最後のk列だけを表示する方法は?

ls -l最初の4つの列を削除して、コマンドに表示される列を制限したいと思います。

ls -lh示す:

drwxr-sr-x 20 gamma alpha 4.0K May 22 13:18 Desktop
drwxr-sr-x  3 gamma alpha   22 Oct  6  2014 Eclipse
-rw-r--r--  1 gamma alpha  28K Jul 11  2014 fire
drwxr-sr-x  5 gamma alpha   48 Mar 31  2014 lb_deployment

最初の4列を削除するためにls -lh | cut -d " " -f5-。ただし、期待どおりに動作しません。

4.0K May 22 13:18 Desktop
alpha  22 Oct  6  2014 Eclipse
alpha 28K Jul 11  2014 fire
alpha  48 Mar 31  2014 lb_deployment

私は次のような外観が大好きです。

4.0K May 22 13:18 Desktop
  22 Oct  6  2014 Eclipse
 28K Jul 11  2014 fire
  48 Mar 31  2014 lb_deployment

期待どおりに動作しないのは、 で区切り文字を空白cut( -d " ") として定義したのですが、最初のファイル ( の 2 番目の列) へのリンク数が\ls -lh2 桁の数字 (20) なので、もうls -lh1 つ追加したからです。 1ビットリンクカウンタを使用すると、ファイル内のリンクカウンタにスペースを追加して列の位置を調整できます。これはcut予期しない動作を引き起こします。

この問題を解決する方法についてのアイデアはありますか?

ベストアンサー1

ユーザーとグループの列を省略するには、-oオプションを渡します。-gユーザー名とグループ名にはスペースを含めることができるため、確実に編集することはできません。

権限とリンク数の列を省略するオプションはありません。保持したい最初の列は空白(右揃えの場合)で始まる可能性があるため、空白を空白ではなく変換として開始基準として使用することはできません。代わりに、最後の列の右端を使用して不要な列を削除してください。最初の2つの列にはスペースを含めることができないので安全です。

ls -lhog | sed 's/^[^ ][^ ]*  *[^ ][^ ]* //'

sed コマンドの説明:

  • s/REGEXP/REPLACEMENT/各行で、指定された正規表現の最初の項目を指定された代替テキストに置き換えます。ここの代替テキストは空です。
  • ^行の先頭にのみ一致するように正規表現の先頭に追加します。
  • [^ ][^ ]*空白を除いて空でない文字シーケンスと一致します。
  • したがって、sedコマンドは、空白ではなく、最初と2番目のシーケンスと次のスペースを削除します(ただし、最後には1つのスペースしかありません)。

おすすめ記事