내 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\+
공백이 아닌 문자와 공백 문자가 일치하는 각 열을 선택 하므로 세 개의 첫 번째 열과 사용자 이름이 일치합니다.