패턴을 /
일치 시키면 /
빠르게 탈출해야 하는 것이 다루기 힘들고 보기 흉해집니다 .
/\/usr\/share\/man\//
sed, perl 또는 Vim의 경우 정규식에 대해 다른 구분 기호를 사용합니다 :
. 예를 들면 다음과 같습니다.
sed '\:/usr/share/man/: do something'
perl -ne 'print if m:/usr/share/man/:'
:g:/usr/share/man/: do something " Vim
이 문제를 어떻게 피할 수 있나요? 그것은 다음과 같습니다:
awk ':/usr/share/man/: {do something}'
내가 생각할 수 있는 가장 좋은 방법은 변수를 사용하는 것입니다.
awk -v pat='/usr/share/man/' '$0 ~ pat {do something}'
그러나 이는 sed/perl/vim 접근 방식에 비해 매우 장황합니다.
물론 경로를 일치시키는 다른 방법(예: )이 있을 수 있지만 이것이 패턴에 나타날 수 있는 /usr/share/man/
유일한 위치는 아닙니다 ./
답변1
그냥 /testregexp/
로 바꾸세요$0 ~ "testregexp"
간단한 예:
$ echo "a/b/c" | awk ' ( $0 ~ "a/b/c" ) { print "we have a winner" ; }'
we have a winner
다른 예시
regexp='some regexp "with /lots/ of double quotes" "everywhere"'
awk -v reg="${regexp}" ' ( $0 ~ reg ) { action here... }'
답변2
awk 자체에는 간단하고 간단한 솔루션이 없습니다. 일반적으로 Perl로 전환(또는 sed
간단한 작업을 위해 Perl로 전환)하는 것이 일반적인 해결 방법입니다.