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 -lh
2 桁の数字 (20) なので、もうls -lh
1 つ追加したからです。 1ビットリンクカウンタを使用すると、ファイル内のリンクカウンタにスペースを追加して列の位置を調整できます。これはcut
予期しない動作を引き起こします。
この問題を解決する方法についてのアイデアはありますか?
ベストアンサー1
ユーザーとグループの列を省略するには、-o
オプションを渡します。-g
ユーザー名とグループ名にはスペースを含めることができるため、確実に編集することはできません。
権限とリンク数の列を省略するオプションはありません。保持したい最初の列は空白(右揃えの場合)で始まる可能性があるため、空白を空白ではなく変換として開始基準として使用することはできません。代わりに、最後の列の右端を使用して不要な列を削除してください。最初の2つの列にはスペースを含めることができないので安全です。
ls -lhog | sed 's/^[^ ][^ ]* *[^ ][^ ]* //'
sed コマンドの説明:
s/REGEXP/REPLACEMENT/
各行で、指定された正規表現の最初の項目を指定された代替テキストに置き換えます。ここの代替テキストは空です。^
行の先頭にのみ一致するように正規表現の先頭に追加します。[^ ][^ ]*
空白を除いて空でない文字シーケンスと一致します。- したがって、sedコマンドは、空白ではなく、最初と2番目のシーケンスと次のスペースを削除します(ただし、最後には1つのスペースしかありません)。