쉘의 매개 변수에서 <또는>를 이스케이프 처리하는 방법은 무엇입니까?


10

문자 grep가 포함 된 PCRE 표현식과 함께 사용하고 싶습니다 <. Bash는 리디렉션을 원한다고 생각하지만 원하지 않습니다. 어떻게 탈출 할 수 <있습니까?

답변:


11

백 슬래시로 할 수있었습니다.

25 % grep \< xmospos.c
#include        <stdio.h>
#include        <stdlib.h>
#include        <getopt.h>
#include        <X11/Xlib.h>

따옴표보다 적고 따옴표가 백 슬래시보다 적다.


5
예, 또는 작은 따옴표로 묶습니다
glenn jackman

예를 들어 정확히 이스케이프 처리하는 방법을 배우는 것이 grep -oP '(?< )(.*)$'좋습니다. 처음에 그것을 시도했다.
hakre

@hakre 정규 표현식에 구문 오류가있는 것 같습니다. 당신은 의미했다 (?<! )(.*)$(?<= )(.*)$?
Gilles 'SO- 악마 그만'

4

두 가지 간단한 규칙 :

  • 백 슬래시 \C는 개행 문자가 아닌 다음 문자를 이스케이프합니다.
  • 작은 따옴표 'text'는 백 슬래시를 포함하여 작은 따옴표를 포함하지 않고 따옴표 사이에있는 모든 문자를 이스케이프합니다 (따옴표가있는 텍스트의 끝을 표시하기 때문에).

그러므로:

grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile

작은 따옴표가 포함 된 인수를 전달해야하는 경우 '\''작은 따옴표 안에 작은 따옴표를 이스케이프 처리 하는 데 사용할 수 있습니다 . 기술적으로 이것은 첫 번째 리터럴 텍스트를 끝내고 리터럴 '을 같은 단어에 넣은 다음 더 많은 리터럴 텍스트를 여전히 같은 단어에 넣는 것 입니다.

grep '^D'\''oh!' myfile

나머지 인용 규칙 (요약) :

  • 공백 문자와 !"#$&'()*;<>?[\]^`{|}~다른 문자 (문자, 숫자 %+,-./:=@_및 비 ASCII 문자) 는 적어도 몇 번은 인용해야합니다 .
  • 큰 따옴표 사이 "$\`에서 and를 제외한 모든 문자는 문자 적으로 사용됩니다 (및 기록이 활성화 된 쉘에서) !. 리터럴이 아닌 문자 중 하나에 선행하지 않는 한 큰 따옴표 사이의 백 슬래시는 문자열에 나타납니다.

이 규칙은 bash 및 다른 Bourne 스타일 쉘 (예 : ash 및 ksh)에 적용됩니다. 그것들은 zsh에도 적용됩니다 ( =공백 후 인용이 필요할 수는 없습니다). csh / tcsh와 Fish의 규칙이 다릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.