단일 열에서 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

가장 쉬운 방법은 무엇입니까? 대답은 많은 Unices로 이식 가능해야 하며 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\+기본적으로 공백이 아닌 문자와 공백 문자가 일치하는 모든 열을 선택하므로 처음 세 개의 열과 사용자 이름을 일치시킵니다.

관련 정보