$
문자가 포함된 문자열을 일치시키는 방법은 무엇입니까 ?
예 - 다음은 grep
일치하는 항목을 반환하지 않습니다.
param="ambari_parameter$"
echo "ambari_parameter$" | grep $param
echo "ambari_parameter$" | grep "$param"
답변1
이 경우 문자열은 $param
정규식으로 해석됩니다. 표현식에는 패턴을 일치의 끝에 고정하는 $
가 포함되어 있습니다. 입력 데이터가 맨 마지막( 문자열의 끝으로 인해)에 포함되지 않으므로 일치하지 않습니다 ambari_parameter
.ambari_parameter$
ambari_parameter
$
패턴 $
(큰따옴표로 묶인 문자열)에서 as를 이스케이프하거나 대괄호 그룹에 넣을 수 있지만 정규식 일치보다는 문자열 일치를 수행하려는 것 같으므로 다음을 사용하는 것이 더 적절할 수 있습니다. :\$
\\$
$
[$]
-F
echo 'ambari_parameter$' | grep -F -e "$param"
사용하면 주어진 패턴이 정규 표현식이 아닌 문자열로 처리됩니다 grep -F
. grep
따라서 패턴의 모든 문자는 문자 그대로 일치하며 $
마지막 문자도 일치합니다.
-e
또한 여기에서는 grep
다음 매개변수를 강제로 패턴으로 인식하는 데 사용 했습니다 . 대시( )로 시작하는 경우 $param
필수입니다 -
. -e
이는 일반적으로 일치하는 패턴이 변수에 제공될 때마다 사용할 수 있습니다.
추가 요청모두입력 줄의 전체 문자열을 일치시키려면 다음을 추가하세요 -x
.
echo 'ambari_parameter$' | grep -xF -e "$param"
이면 문자열 또는 ( $param
그러나ambari_parameter$
_ambari_parameter$
ambari_parameter$100
~ 할 것이다-x
생략하면 일치합니다.)
답변2
축어적으로 일치시키려는 완전한 패턴이 있는 경우그렇다면 그것을 정규식으로 생각하지 마십시오. 만약 너라면하다$
정규식의 텍스트를 일치시키려면 를 사용하십시오 \$
.
.
Like \
및 기타 여러 구두점 문자는 $
다음과 같습니다 .메타 문자정규식에서. 문자 $
매칭줄 끝의 빈 문자열(따라서 와 x$
일치 x
하지만 줄 끝에서만 가능합니다). 스키마에 다음이 포함되어 있지 않은 경우어느메타 문자인 경우 이를 정규식으로 처리할 필요가 없습니다.grep -F
쿠사라난다가 설명하듯이.
만약에$
정규식에서 문자 그대로 하나 이상의 메타 문자를 일치시키고 \
메타 문자로 이스케이프해야 합니다 . 리터럴 $
write 와 일치하고 \$
리터럴 \
write \\
와 일치합니다.
param='ambari_parameter\$'
echo "ambari_parameter$" | grep "$param"
param
쉘에서 to를 지정할 때 '
'
위에 표시된 대로 정규식을 작은따옴표( )로 묶으십시오. 왜냐하면 $
및는 \
모든 Bourne 스타일 쉘(세게 때리다).\
껍질에작동 원리는 기본적으로 정규식과 동일합니다. ( $
아니요. 다양한 용도로 사용됩니다.쉘 확장/교체, 특히매개변수 확장).
따옴표 없이도큰따옴표, 셸에서 리터럴을 나타내는 \$
, 이는 정규식 메타 문자로 해석되는 as 로 전달됩니다. 작은따옴표로 묶으면 이런 일이 발생하지 않습니다. 글을 쓸 수도 있고 때로는 그냥 쓸 수도 있지만 혼란스럽습니다.$
grep
$
grep
\\\$
\\$
답변3
정확히 일치하는 특수 문자를 찾으려면 다음과 같이 특수 문자를 이스케이프해야 합니다.
작은따옴표로 묶인 경우 한 번 이스케이프 처리해야 합니다.
grep 'parameter\$'
큰따옴표로 묶였거나 따옴표로 묶지 않은 경우 다시 이스케이프해야 합니다.
grep "parameter\\$" #or
grep parameter\\$
일치하는 공백이 인용되지 않은 경우에도 이스케이프 처리해야 합니다.
grep para\ meter\\$