2014-02-10 3 views
0

awk 명령을 사용하여 디렉토리 만 인쇄하려고합니다. 내가 적절한 정규식 일치 만든 그래서 현재와 부모 디렉토리를 인쇄하지 않을 : 제대로awk 명령으로 디렉토리 만 인쇄하는 방법

ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.$/ && $9 !~ /^\.\.$/ { print $1"\t"$9 } ' 

코드가 작동을하지만 난 이런 식으로, 더 읽을 수 있도록 원 :

ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.{1,2}$/ { print $1"\t"$9 } ' 

불행히도 두 번째 경기는 효과가 없습니다.

하나 또는 두 개의 숫자와 일치하도록 정의하는 방법 s?

+0

을 왜 그냥 두어도

ls -ld */ 

또는 'ls -lA'를 사용하면'.'과'..'에 대한 항목을 제외시킬 수 있습니까? – larsks

+0

네, 지금까지 구현 된 명령을 사용하는 것이 더 낫지 만 그들에 대해 알아야합니다 ... 응답 해 주셔서 감사합니다. 나는 당신의 명제를 사용할 것이다. 그러나 나는 아직도 나의 정규 표현식이 그것의 목적을 달성하기 위해 어떻게 적절하게 정의되어야하는지 의아해하고있다. 나 – Dominik

+0

두 작품, 내가 힌트 : 내 질문에 대한 대답은 '1!입니다 -la의 사용을 만들 것입니다 | awk '$ 1 ~/[d].*/{print $ 1 "\ t"$ 9} '' – michaeltang

답변

0

두 번째 예는 나를 위해 잘 작동합니다 :

내가 처음 그것을보고했다
$ /bin/ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.{1,2}$/ {print $1"\t"$9}' 
drwxr-xr-x .git 
drwxr-xr-x .idea 
drwxr-xr-x data 
drwxr-xr-x src 

, 그것은 하나 내가 '1!'별명을 가지고 있기 때문에 나를 위해 작동하지 않는 '1! -LF' 이는 현재 디렉토리가 "./"로 나열되고 부모가 "../"이었기 때문에 '/'가 줄 끝에 고정 되었기 때문에 정규 표현식과 일치하지 않음을 의미합니다 ('$'는 정규식). 비슷한 문제가 있는지 궁금해.

+0

ls -lF의 조합도 실패했습니다. – Dominik

0

당신이 솔라리스에서 awk 명령을 실행 했는가, 나이 AWK (비 GNU) AWK 버전은 같은 정규식 번호 패턴을 지원하지 않기 때문에 작동하지 않습니다 /usr/xpg4/bin/awk

ls -la | /usr/xpg4/bin/awk '$1 ~ /[d].*/ && $9 !~ /^\.{1,2}$/ {print $1"\t"$9}' 
+0

우분투를 사용하고 있습니다. – Dominik

0

귀하의 2 예에서 awk가 교체하십시오 이 :

/\.{1,2}/ 

다만 디렉토리 목록을 얻으려면 ls` 출력을 구문 분석하면 안됩니다.

편집 : 숨겨진 디렉토리를 인쇄하지만 방지하기 위해 ... 사용이 :

당신은 사용할 수 있습니다

printf "%s\n" */ .*[!.]*/ 

염두 파일에 보관는/그 안에 줄 바꿈과 디렉토리 이름은 문제가있다.

+0

명령 awk --version에서 나는 GNU Awk 3.1.8을 사용하고 있기 때문에 모든 정보가 제대로 작동해야 함을 알고 있습니다. 두 번째 힌트가 숨겨진 디렉토리와 일치하지 않습니다 :/ – Dominik

+0

업데이트 된 답변보기 또는 그렇지 않으면 'printf "% s \ n"* /. * /'를 시도해 숨겨진 디렉토리를 출력하십시오. – anubhava

+0

그러나'printf "% s \ n"* /. * /'를 사용하면 "." 및 ".."디렉토리, 나는 피하고 싶습니다. – Dominik

0

당신은 매를 포함하지만 잘 작동하지 않는 다음, 사용할 수 있습니다 더 나은

ls -1 -d */ 
+0

이 명령은 숨겨진 디렉터리와도 일치하지 않습니다. / – Dominik

0

는 그냥 astarisk *

ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.*$/ {print $1"\t"$9}'