如何在外壳程序的参数中转义<或>?


Answers:


11

我能够用反斜杠来做到这一点:

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

引号小于和引号反斜线都比这两个都低得出奇。


5
是的,或者用单引号引起来
格伦·杰克曼

我仍然需要学习,例如转义如何完全起作用:grep -oP '(?< )(.*)$'例如,单引号不起作用。首先尝试了它。
hakre 2011年

@hakre您的正则表达式中似乎存在语法错误。你是说(?<! )(.*)$还是(?<= )(.*)$
吉尔(Gilles)“所以,别再邪恶了”,

4

两个简单的规则:

  • 反斜杠\C转义除换行符外的下一个字符(无论是什么)。
  • 单引号会'text'转义它们之间的任何字符,包括反斜杠,但不包括单引号(因为它标记了引用文本的结尾)。

从而:

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

如果需要传递包含单引号的参数,则可以使用'\''“转义”单引号内的单引号。从技术上讲,这是在第一个文字文本的结尾,然后将一个文字'放入相同的单词中,然后在相同的单词中放置更多文字。

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

其余的报价规则(汇总):

  • 您至少需要在某些情况下引用以下字符:空格和!"#$&'()*;<>?[\]^`{|}~(换句话说,以下字符是安全的:字母,数字%+,-./:=@_和非ASCII字符)。
  • 在双引号之间,所有字符都按字面使用"$\`和和(在启用了历史记录的shell中)!。除非在非文字字符之一之前,否则双引号之间的反斜杠将出现在字符串中。

这些规则适用于bash和其他Bourne样式的shell(例如ash和ksh)。它们也适用于zsh(除非=在空格后可能需要引用)。csh / tcsh和Fish中的规则不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.