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
$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\+
기본적으로 공백이 아닌 문자와 공백 문자가 일치하는 모든 열을 선택하므로 처음 세 개의 열과 사용자 이름을 일치시킵니다.