단일 열에서 grep을 실행하는 방법은 무엇입니까? rahmu.file -rw-r–r– 1 rahmu user

ls -l명령 의 출력을 grep하고 싶습니다 .

-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

grep rahmu$ 3 열에서만 실행하고 싶으 므로 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에서 이식 가능해야합니다.

NB : 특정 사용자에게 속한 모든 파일을 찾는 방법을 찾고 있지 않습니다. 이 예는 내 질문을 더 명확하게하기 위해 제공된 것입니다.



답변

한 번 더 시간이 awk절약됩니다!

비교적 간단한 구문을 사용하여 간단하게 수행 할 수 있습니다.

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

또는 더 간단합니다 : (Peter.O에게 의견에 감사드립니다)

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

답변

주어진 열에서 문자열의 일부만 일치 시키려면 https://stackoverflow.com/questions/17001849/awk-partly-string-match-if-column-partly-matches의 조언을 사용할 수 있습니다

some_command | awk '$6 ~ /string/'

답변

열별, 고정 크기 열을 의미하는 경우 다음을 수행 할 수 있습니다.

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

여기서 ^줄의 시작을 .의미하고 모든 문자를 \{15\}의미하며 이전 문자 (이 경우 모든 문자)가 정확히 15 번 발생합니다.


답변

나는 파티에 늦었다는 것을 알고 있지만이 문제에 대한 매우 일반적인 해결책은 정규식과 함께 awk를 사용하는 것입니다.

awk '$3~/rahmu/{print}' input_file

‘//’로 묶인 부분은 모든 종류의 정규식이 될 수 있습니다.


답변

단일 사용자 이름 열을 기반으로 grep하고 파일 만 인쇄하려면 다음을 시도하십시오.

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

디렉토리의 경우 remove -로 변경 d하십시오 -.

기본적으로 \S\+\s\+공백이 아닌 문자와 공백 문자가 일치하는 각 열을 선택 하므로 세 개의 첫 번째 열과 사용자 이름이 일치합니다.