bash: 문자열 변수에 별표가 포함되어 있습니다. 이 변수를 사용하여 grep, sed 등으로 검색하려면 어떻게 해야 합니까?

bash: 문자열 변수에 별표가 포함되어 있습니다. 이 변수를 사용하여 grep, sed 등으로 검색하려면 어떻게 해야 합니까?

좋은 하루 보내세요. 텍스트 파일(zz.txt)이 있습니다.

Chemical name
3-Aminopropane-1-sulphonic acid
Synonym(s)
--
Homotaurine * Tramiprosate
--
Chemical name
Common name and synonyms
...

변수 s="Homotourine * Tramiprosate"가 있습니다. 텍스트 파일에서 이 변수의 텍스트를 선택(선택 취소)하려고 합니다.

s="Homotaurine * Tramiprosate"; cat zz.txt | grep -i "$s"
s="Homotaurine * Tramiprosate";cat zz.txt | sed -ne "/$s/p"

작동하지 않습니다. 그러나 $s를 "화학물질 이름"으로 변경하면 모든 것이 잘 작동하고 grep과 sed도 정확하고 유사하게 작동합니다. 다른 텍스트 파일에서 변수 $s를 받습니다. 다음에는 별표를 포함할 수도 있고 포함하지 않을 수도 있습니다. 예, 별표는 매우 특별한 문자라는 것을 알고 있습니다. sed/grep을 사용하여 작업을 어떻게 해결할 수 있나요? 한 가지 더 질문 - 또 어떤 비슷한 캐릭터가 골치 아픈 일이 될까요?

답변1

-Fgrep의 경우 정규식 대신 고정 문자열을 사용할 수 있습니다 . sed의 경우 상황은 훨씬 더 복잡합니다. Perl로 전환하면 도움이 될 수도 있습니다 \Q/참조 요소기능.

#!/bin/bash
s="Homotaurine * Tramiprosate"; grep -Fi -- "$s" zz.txt
s="Homotaurine * Tramiprosate"; s=$s perl -ne 'print if /\Q$ENV{s}/' -- zz.txt

관련 정보