grep
해당 문자가 포함된 PCRE 표현식과 함께 사용하고 싶습니다 <
. Bash는 내가 리디렉션을 원한다고 생각하지만 그렇지 않습니다. 어떻게 탈출하나요 <
?
답변1
백슬래시를 사용하여 이 작업을 수행할 수 있습니다.
25 % grep \< xmospos.c
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <X11/Xlib.h>
인용된 '미만' 기호와 인용된 백슬래시 '미만' 기호는 모두 어리석은 대답을 제공합니다.
답변2
두 가지 간단한 규칙:
- 백슬래시는
\C
개행 문자를 제외하고 다음 문자를 이스케이프합니다. - 작은따옴표는
'text'
백슬래시를 포함하여 그 사이의 모든 문자를 이스케이프하지만 작은따옴표는 이스케이프되지 않습니다(인용된 텍스트의 끝을 표시하기 때문).
그러므로:
grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile
'\''
작은따옴표가 포함된 매개변수를 전달해야 하는 경우 작은따옴표 내의 작은따옴표를 "이스케이프"하는 방법을 사용할 수 있습니다 . 기술적으로 이것이 하는 일은 첫 번째 리터럴 텍스트를 끝내고 리터럴을 '
같은 단어에 넣은 다음 더 많은 리터럴 텍스트를 같은 단어에 넣는 것입니다.
grep '^D'\''oh!' myfile
나머지 인용 규칙(요약):
!"#$&'()*;<>?[\]^`{|}~
공백 및 문자 (즉, 문자, 숫자%+,-./:=@_
및 ASCII가 아닌 문자) 는 최소한 어느 정도 인용해야 합니다.- 큰따옴표 사이에 및 를 제외한 모든 문자는 문자 그대로 사용됩니다
"$\`
(기록 가능 쉘에서)!
. 리터럴이 아닌 문자 중 하나 앞에 오지 않으면 큰따옴표 사이의 백슬래시가 문자열에 나타납니다.
이러한 규칙은 bash 및 기타 Bourne 스타일 셸(예: ash 및 ksh)에 적용됩니다. 또한 zsh에서도 작동합니다( =
공백 뒤에 따옴표가 올 수 있다는 점 제외). csh/tcsh와 Fish에서는 규칙이 다릅니다.