큰따옴표와 함께 awk를 사용할 때 패턴을 부정하는 방법

큰따옴표와 함께 awk를 사용할 때 패턴을 부정하는 방법

다음 파일이 있습니다.

$ cat files
foo.txt
bar.js

bash awk를 사용하여 .js.

awk는 작은따옴표를 사용할 때 잘 작동합니다.

$ awk '$1 !~ /.js$/ {print $1}' files
foo.txt

그러나 큰따옴표 awk를 사용하는 경우:

$ awk "\$1 !~ /.js$/ {print \$1}" files
-bash: !~: event not found

답변1

그러지 마세요.

간단한 변수 매개변수 사용:

$ awk -v exclude='\.js$' '$1 !~ exclude' file
foo.txt

또는 환경을 통해 스키마를 가져옵니다(포함된 스키마를 지원하는 편리한 방법 \\).

$ exclude='\.js$' awk '$1 !~ ENVIRON["exclude"]' file

댓글에서 언급한 대로(현재 삭제됨):

$ awk "\$1 !""~ /.js$/ {print \$1}" file

효과가 있을 수도 있지만아니요권장되는 방법입니다. 그냥 간단해요 못생긴. 사용 방법 알아보기올바른 방법.

답변2

당신은 속은 수백만 명 중 하나입니다역사적 확장는 사용자 천 명 중 단 한 명만이 사용했지만 기본적으로 활성화되어 있습니다.

set +H쉘 시작 파일에서 이를 사용하거나 비활성화하는 것이 가장 좋습니다 set +o histexpand. 그러면 !이상한 문제 없이 사용이 가능합니다 .

관련 정보