2

12月に変更されたファイルのみを含むようにの出力をフォーマットして、適切に出力しようとしてls -laいます。現在、次のようになっています。

ls -la | awk {'print $ 6、$ 7、$ 8、$ 9、$ 10'} | grep "Dec" | 並べ替え-r| 頭-5
12月4日20:15フォルダ/
12月4日19:51./
12月4日17:42フォルダ\ジョン/
12月4日16:19宿題\MAT\ 08 /
12月4日16:05フォルダ\スミス/

等..

「./」や「../」などを含まないように正規表現のようなものを設定するにはどうすればよいですか。

また、スペースが含まれているフォルダのスラッシュ「\」を省略するにはどうすればよいですか。最後にスラッシュを落としたいのですが。これはシェルコマンドで可能ですか?または、Perlを使用してテストに変更を加える必要がありますか?日時はそのままにしておきたいです。どんな助けでも大歓迎です!

ボックスにはLinuxがあり、これはSSH経由で実行されています。

編集:

これが私がこれまでに持っているものです(これについてはMarkとgbaconに感謝します)

ls -laF | grep -vE ' ..?/?$' | awk '{ for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n"); } ' | grep "Dec" | sort -r | head -5

「\」をスペース「」に置き換えるのに問題があります。それ以外はこれまでのご協力ありがとうございました!

4

7 に答える 7

1

これがあなたの答えの1つです:

「./」や「../」などを含まないように正規表現のようなものを設定するにはどうすればよいですか。

ls -lAの代わりに使用してくださいls -la

固定数の列を印刷する代わりに、列6から行の終わりまですべてを印刷できます。

ls -lA | awk '{ for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n"); } '

スペースをバックスラッシュしないので、なぜそれを取得しているのかわかりません。これを修正するには、次を追加します。

| sed 's/\\//g'
于 2009-12-05T23:10:15.517 に答える
1

'ls'コマンドが他のものにエイリアスされていないことを確認してください。通常、「raw」lsはディレクトリの/を提供せず、スペースをエスケープする必要もありません。

明らかに、awkがこれらのファイルを印刷するためのスペースをエスケープしているのは、awkがフィールドを空白で分割する傾向があるためです。これが、\文字の目的です。

Spacesはファイル名であり、ここでやろうとしているような簡単なスクリプトやパイプのマッシュアップを書くのを妨げるように特別に設計されています。

于 2009-12-05T23:12:48.490 に答える
1

次の出力をフィルタリングできますls

ls -la | grep -vE ' ..?/?$' | awk {'print $6,$7,$8,$9,$10'} | grep "Dec" | sort -r | head -5

Perlを使用することに満足している場合:

ls -la | perl -lane 's/\\ / /g;
                     print "@F[5..9]"
                       if $F[8] !~ m!^..?/?$! &&
                          $F[5] eq "Dec"'
于 2009-12-05T23:18:51.820 に答える
1

あなたはあなたfindのためにほとんどの仕事をするために使うことができます:

find -mindepth 1 -maxdepth 1 -printf "%Tb %Td %TH:%TM %f\n" | grep "^Dec" | sort -r

親ディレクトリ(..)はデフォルトでは含まれていません。は-mindepth 1現在のディレクトリ(。)を削除します。を削除し-maxdepth 1て再帰的にすることもできますが、を変更し%f%p、ファイル名にパスを含める必要があります。

これらは-printf:のフィールドです。

  • %Tb-短い月の名前
  • %Td-月の日
  • %TM:%TM-時間と分
  • %f-ファイル名

たとえば、grep11月に変更された「Decimal」という名前のファイルと一致しないように、行の先頭に一致を追加しました。

于 2009-12-06T02:12:59.453 に答える
1

すべてのgrepsとsedsとは何ですか?

ls -laF | awk '!/\.\.\/$/ && !/\.\/$/ &&/Dec/ { for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n"); }'
于 2009-12-06T04:47:15.030 に答える
0

よくあなたはドロップすることができ...追加することによってgrep -v "\." | grep -v "\.\."

残りについてはよくわかりません

于 2009-12-05T23:18:39.263 に答える
0

awkとgrep/sedを使用したパイプラインを見るのは本当にイライラします。Awkは非常に強力なライン処理ツールです。

ls -laF | awk '
    / \.\.?\/$/ {next}
    / Dec / {for (i=1; i<=5; i++) $i = ""; print} 
' | sort -r | head -5
于 2009-12-06T03:20:08.460 に答える