2013-09-26 6 views
1

내 의도는 전체 줄이 구성 파일에 있는지 확인하는 것입니다. 여기 은 예입니다전체 줄을 검색하는 방법

ports.conf :

#NameVirtualHost *:80 
NameVirtualHost *:80 

가 지금은 아니지만 #NameVirtualHost *:80에 대한 NameVirtualHost *:80 검색 할!

이것에 대한 나의 첫 번째 생각은 물론 grep 사용에 관한 것입니다. 이 같은 :

grep -F "NameVirtualHost *:80" ports.conf 그게 내게 두 줄을주고있다 아니야 내가 원하는 걸. 두 번째 생각은 정규식을 과 같이 사용하는 것이 었습니다. 하지만 분명히 이제는 특수 문자를 이스케이프 처리해야합니다. *

이것은별로 중요하지 않을 수도 있지만 개별 검색 문자열을 전달하고 스크립트를 사용하면서 이스케이프 문자열을 사용하고 싶지 않습니다.

제 질문은 : 특수 문자를 어떻게 이스케이프합니까? 또는 다른 도구로 어떻게 동일한 결과를 얻을 수 있습니까?

-x, --line-regexp 
      Select only those matches that exactly match the whole line. (-x is specified by POSIX.) 

당신이 grep -Fx "NameVirtualHost *:80" ports.conf에 첫 번째 명령을 변경한다면, 당신은 당신이 원하는 것을 얻을 :

답변

4

grep 정확히 그 작업을 수행하는 옵션 -x 있습니다. 단순하게 정규 표현식을 유지하기 위해 내가 생각할 수있는

+0

좋은 사용법은'-x'입니다. 선이 비어있는 경우 (탭 또는 공백)? '(공백 ...) NameVir ....'? – Kent

+0

+1. 정답. 너도 빨랐어! – devnull

+0

그게 전부 야! 감사합니다 – tuna

0

가장 빠른 방법은 모두 함께

printf '%q' 'NameVirtualHost *:80' 

탈출

grep -F "NameVirtualHost *:80" ports.conf | grep -v "^#\|^\/\/" 
+0

나를 돕지 않습니다. '#'대신에'//'로 주석 처리 된 행이 있다면 그것은 깨졌습니다. – tuna

+0

사실,'# NameVirtualHost * : 80'과 같이 # 앞에 공백이 있거나'NameVirtualHost * : 80 # comment'와 같은 주석 뒤에 공백이 있으면 도움이되지 않습니다. –

+0

@ 메탄올 업데이트 –

1

사용의 printf입니다

grep -e "^`printf '%q' 'NameVirtualHost *:80'`$" test 

또는

reg="NameVirtualHost *:80" 
grep -e "^`printf '%q' "$reg"`$" test 
관련 문제