bugfix> grep > 投稿

このような多くのファイルを含むディレクトリがあり、

grepを使用してこれらのファイルの文字列を検索すると、この順序でファイルlog.0、次にlog.1 ....が検索されます。

しかし、私はgrepに時間順に基づいて検索したい、 それから私はこれが好きです、

grep -i 'stg_data.li51_cicmpdtap0521' 
$(ls -ltr sequencer_cmbcs_seq_debug.log*) | less

しかし、私はこのエラーを受け取ります

grep:invalid option -- -

私がこれに変更した後、それは働いた、

grep -i 'stg_data.li51_cicmpdtap0521' $(ls -tr 
sequencer_cmbcs_seq_debug.log*) | less

ls -ltrは機能しないが、ls -trは機能するのはなぜですか?ここで-lを使用する場合と-lを使用しない場合の違いは何ですか?

回答 1 件
  • 理由 ls -ltr  動作しないのは、grepが、返されたディレクトリリストの「長い」出力全体を使用しようとしているためです。基本的に、これは次のようなものです。

    -rw-rw-rw-  1 user  staff    473 May 24 18:14 file
    
    

    次のようなgrepコマンドが表示されます。

    grep -i 'string' -rw-rw-rw-  1 user  staff    473 May 24 18:14 file | less
    
    

    最初の列のダッシュに注意してください(例1)。 grepは入力ファイルの内容を解釈できず、「無効なオプション」を返します。 ls を変更したとき   -l を削除するコマンド  長い出力はファイル名だけで、grepは続行できます。

あなたの答え