単一の列でgrepを実行する方法は?

単一の列でgrepを実行する方法は?

ls -lgrepコマンドの出力が必要です。

-rw-r--r--   1 root root       1866 Feb 14 07:47 rahmu.file
-rw-r--r--   1 rahmu user     95653 Feb 14 07:47 foo.file
-rw-r--r--   1 rahmu user   1073822 Feb 14 21:01 bar.file

$3列でのみ実行したいgrep rahmuので、コマンドの出力はgrep次のようになります。

-rw-r--r--   1 rahmu user     95653 Feb 14 07:47 foo.file
-rw-r--r--   1 rahmu user   1073822 Feb 14 21:01 bar.file

最も簡単な方法は何ですか?答えは多くのUniceに移植可能でなければならず、LinuxとSolarisに焦点を当てることをお勧めします。

注:特定のユーザーに属するすべてのファイルを見つける方法を探しているわけではありません。この例は、私の質問をより明確にするために提供されています。

答え1

もう一度awk状況を保存することができます!

比較的単純な構文を使用した簡単なアプローチは次のとおりです。

ls -l | awk '{if ($3 == "rahmu") print $0;}'

はるかに簡単です。(コメントにPeter.Oに感謝します)

ls -l | awk '$3 == "rahmu"' 

答え2

特定の列の文字列の一部のみを一致させるには、次の提案を使用できます。https://stackoverflow.com/questions/17001849/awk-partly-string-match-if-column-partly-matches

some_command | awk '$6 ~ /string/'

答え3

列が固定サイズの列を意味する場合は、次のことができます。

ls -l | grep "^.\{15\}rahmu"

ここでは^行の先頭を表し、.すべての文字を表し、\{15\}前の文字(この場合はすべての文字)の正確に15回の発生を示します。

答え4

単一のユーザー名列に基づいて(そしてファイルのみを印刷する)grepするには、次のことを試すことができます。

ls -la | grep "^-\S\+\s\+\S\+\s\+rahmu"

ディレクトリの場合-に変更しd、すべてのタイプの場合は削除に変更します-

\S\+\s\+デフォルトでは、空白以外の文字と空白文字が一致するすべての列を選択するので、最初の3つの列とユーザー名を一致させます。

関連情報