grep을 사용하여 "$" 문자가 포함된 문자열을 일치시키는 방법은 무엇입니까?

grep을 사용하여 "$" 문자가 포함된 문자열을 일치시키는 방법은 무엇입니까?

$문자가 포함된 문자열을 일치시키는 방법은 무엇입니까 ?

예 - 다음은 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\\$

관련 정보