답변1
zsh: event not found: 0
이는 쉘이 !
기록 확장을 트리거로 처리하기 때문입니다. 문자열을 작은따옴표로 묶거나 zsh 또는 Bash에서 set +o histexpand
사용 하여 기록 확장을 비활성화합니다. 예를 들어 참조하십시오.setopt nohistexpand
set +H
Bash의 느낌표(!) 이해하기
... grep -E -o "#time\s(?!0)\d{1,2}[m|h|d]"
\s
, (?!...)
및 는 Perl \d
정규식의 일부이며 grep -E
사용되는 표준 확장 정규식이 아닙니다. [m|h|d]
, 또는 중 하나의 단일 문자 와도 일치합니다 . 이렇게 작성하는 것이 더 좋지만, 의미할 수도 있습니다(또는 작성하는 데 더 긴 방법일 뿐입니다).m
|
h
d
[mhd|]
[mhd]
(m|h|d)
정규식을 표준 ERE로 다시 작성하거나 grep -P
GNU grep과 같은 Perl 정규식을 사용할 수 있는 도구로 전환해야 할 수도 있습니다.
답변2
RE와는 아무런 관련이 없습니다. 이를 통해 쉘은 문자열 내부를 확인하고 평가할 수 있습니다. (그래서 오류 메시지가 zsh
. 대신 .로 시작됩니다 grep
.) 이를 방지하려면 큰따옴표( '
) 대신 작은따옴표( "
)를 사용하세요.