ls가 디렉터리가 아닌 항목을 표시하도록 awk를 사용해 보십시오.

ls가 디렉터리가 아닌 항목을 표시하도록 awk를 사용해 보십시오.

디렉터리가 아닌 모든 파일 목록을 표시하려고 합니다. ls -la | awk '$1 != "d*"'첫 번째 열에 시작하는 문자열이 표시되지 않기를 바라며 입력했지만 d예상대로 작동하지 않았습니다. 내 실수는 어디에 있습니까?

답변1

!=문자열 비교(또는 비교 대상에 따라 숫자 비교) 연산자입니다. 문자열 비교( A != B)의 경우 구현에 따라 awk바이트 간 비교일 수 있으며 일부(POSIX에서 요구하는 경우)의 경우 합계가 다르게 정렬되는지 테스트 하는 A < B || A > B약어 입니다.A != BAB

어떤 의미에서도 패턴 일치 연산자가 아닙니다. 이를 위해 ~연산자(부정 포함 !~)가 있지만 이는 와일드카드 패턴 일치가 아닌 정규식 일치를 위한 것입니다. 다음을 수행해야 합니다.

ls -la | awk '$1 !~ /^d/'

여기에서는 다음을 사용할 수도 있습니다.

ls -la | grep -v '^d'

가지고 있으면 $1 != "d*"다시 돌아온다진짜첫 번째 필드(또는 일부 구현과 동일한 정렬 awk) 를 제외한 모든 항목에 대해 d*. d*정규식은 모든 숫자(0 포함)와 일치하므로 항상 0 이상을 포함하는 문자열로 반환 d됩니다 .$1 !~ "d*"falsed

답변2

이 시도...

  $ls -la | awk '$1 !~ /[d].*/ '
                 or
  $ls -l | grep -v ^d

답변3

  • !~일치하는 대신 !=정규식을 사용하고 싶습니다 .awk '$1 !~ /^d/
  • 출력은 본질적으로 취약하기 때문에 구문 분석하고 싶지 않습니다 ls.
  • 디렉터리가 아닌 항목만 찾고 있다면 사용할 수 있는 옵션이 find있습니다 ( .-type-type f

관련 정보