디렉터리가 아닌 모든 파일 목록을 표시하려고 합니다. ls -la | awk '$1 != "d*"'
첫 번째 열에 시작하는 문자열이 표시되지 않기를 바라며 입력했지만 d
예상대로 작동하지 않았습니다. 내 실수는 어디에 있습니까?
답변1
!=
문자열 비교(또는 비교 대상에 따라 숫자 비교) 연산자입니다. 문자열 비교( A != B
)의 경우 구현에 따라 awk
바이트 간 비교일 수 있으며 일부(POSIX에서 요구하는 경우)의 경우 합계가 다르게 정렬되는지 테스트 하는 A < B || A > B
약어 입니다.A != B
A
B
어떤 의미에서도 패턴 일치 연산자가 아닙니다. 이를 위해 ~
연산자(부정 포함 !~
)가 있지만 이는 와일드카드 패턴 일치가 아닌 정규식 일치를 위한 것입니다. 다음을 수행해야 합니다.
ls -la | awk '$1 !~ /^d/'
여기에서는 다음을 사용할 수도 있습니다.
ls -la | grep -v '^d'
가지고 있으면 $1 != "d*"
다시 돌아온다진짜첫 번째 필드(또는 일부 구현과 동일한 정렬 awk
) 를 제외한 모든 항목에 대해 d*
. d*
정규식은 모든 숫자(0 포함)와 일치하므로 항상 0 이상을 포함하는 문자열로 반환 d
됩니다 .$1 !~ "d*"
false
d
답변2
이 시도...
$ls -la | awk '$1 !~ /[d].*/ '
or
$ls -l | grep -v ^d
답변3
!~
일치하는 대신!=
정규식을 사용하고 싶습니다 .awk '$1 !~ /^d/
- 출력은 본질적으로 취약하기 때문에 구문 분석하고 싶지 않습니다
ls
. - 디렉터리가 아닌 항목만 찾고 있다면 사용할 수 있는 옵션이
find
있습니다 ( .-type
-type f