《LINUX入门:grep命令中文手册(info grep翻译)》要点:
本文介绍了LINUX入门:grep命令中文手册(info grep翻译),希望对您有用。如果有疑问,可以联系我们。
1.本文为info man的译文,基本依照原文翻译,有几个用不上的选项没有翻译,但为了文章的完整性,给出了原文.
2.译文中有些”(注:)”,为本人自行加入,帮助理解和说明,非原文内容!
本文目次:
1 简介
2 调用grep法式
2.1 敕令行选项
2.1.1 一般选项
2.1.2 节制匹配模式
2.1.3 节制输出内容
2.1.4 节制输出行的前缀
2.1.5 节制输出行的上下文
2.1.6 筛选文件和目录
2.1.7 其他选项
2.2 退出状态码
2.3 各种grep法式
3 正则表达式
3.1 基本结构
3.2 字符类和中括号表达式
3.3 反斜线字符和特殊的表达式
3.4 锚定
3.5 后向引用和子表达式
3.6 基础正则和扩展正则的比拟
4 使用示例
5 已知的一些Bug
1 Introduction
'grep'
用于搜索给定文件中能匹配给定pattern列表的行.当某行能匹配上,(默认)将拷贝该行到尺度输出,或者根据你所指定的选项生成其它序列的输出.
尽管’grep’所期望的是在文本行中做匹配,但即使某输入行的大小长度超出了可用内存空间也不会受到限制,它仍可以匹配一行中任意字符串.如果输入文件的最后一个字节不是换行符,’grep’会自动补上一个.由于换行符也是pattern列表的分隔符,因此没有任何方法匹配文本中的换行符.
2 Invoking ‘grep’
'grep'
命令行的一般语法格局为:
grep OPTIONS PATTERN INPUT_FILE_NAMES
OPTIONS部门可以指定0或多个.只有当没有使用”-e PATTERN”或”-f FILE”时,指定的PATTERN才被grep可视.可以指定0或多个INPUT_FILE_NAMES.
2.1 Command-line Options(命令行选项)
'grep'
有年夜量选项可用:一些是POSIX.2中的,一些是GNU扩展的.长选项都是GNU扩展选项,即使它们来自于POSIX.由POSIX指定的短选项,被明确标注为便于POSIX可移植性编程.有少数几个选项是为了兼容古老版本的grep. 有几个额外的选项用于控制使用哪种变体’grep’匹配引擎(注:fgrep/grep/egrep).
2.1.1 Generic Program Information
'--help'
输出简短的grep命令行使用赞助并退出.
'-V'
'--version'
输出’grep’的版本号.
2.1.2 Matching Control(控制匹配模式)
'-e PATTERN'
'--regexp=PATTERN'
明确指定使用此处的PATTERN作为待匹配的pattern.该选项可以指定多次,它可以掩护以”-“开头的pattern.(‘-e’是POSIX指定的选项.)
'-f FILE'
'--file=FILE'
从FILE中获取pattern列表,每行一个pattern.空的FILE表现不给定任何pattern,所以不会匹配到任何内容.(‘-f’是POSIX指定的选项.)
'-i'
'-y'
'--ignore-case'
忽略PATTERN中的大小写,也忽略输入文件中的大小写区别.’-y’是废弃的用于和老版本坚持兼容性的选项.(‘-i’是POSIX指定的选项.)
'-v'
'--invert-match'
反转匹配的成果,即选择那些未匹配到的行.(‘-v’是POSIX指定的选项.)
'-w'
'--word-regexp'
仅选择能精确匹配整个单词的行.单词的组成字符包含:字母、数字和下划线.除了这些字符,其余都是该选项筛选单词时的单词边界分隔符. (注:例如字符串”fstab fstab(5)”,grep -w ‘fstab’或grep -w ‘fsta.’能匹配这两个单词,但grep -w ‘fsta’无法匹配任意一个)
'-x'
'--line-regexp'
仅选择能准确匹配整行内容的行.(‘-x’是POSIX指定的选项.)
(注:例如某行”abcde”,grep -x ‘abc’将无法匹配该行,而grep -x ‘abcd.’能匹配该行)
2.1.3 General Output Control(节制输出内容)
'-c'
'--count'
不再输出匹配的内容,而是输出匹配到的行数量.如果给定了”-v”选项,则输出未匹配到的行数量.(‘-c’是POSIX指定的选项.)
'--color[=WHEN]'
'--colour[=WHEN]'
对匹配到的内容赋予颜色并输出.WHEN的有效值包含:’never’、’always’或’auto’.
'-L'
'--files-without-match'
不再输出匹配的内容,而是输出未能被匹配到的文件名,当某文件中的某行被匹配到,将不再继续向下搜刮该文件.
(注:和”-l”输出的文件名相反)
'-l'
'--files-with-matches'
不再输出匹配的内容,而是输出能被匹配到的文件名,将不再继续向下搜刮该文件.(‘-l’是POSIX指定的选项.)
'-m NUM'
'--max-count=NUM'
当匹配成功的行有NUM行时,停止读取文件.如果是普通文件作为标准输入,则输出这匹配到的NUM行.grep会在最后一次匹配行后做位置标志,使得调用的另一个进程可以从此处恢复并继续向下搜索.例如,下面的shell脚本:
while grep -m 1 PATTERN
do
echo xxxx
done < FILE
而下面的shell脚本则以分歧于上面脚本方式运行,因为此处使用的是管道,这不是一个实体文件:
cat FILE |
while grep -m 1 PATTERN
do
echo xxxx
done
(注:如果对这两个剧本有疑问,可参考while循环中的陷阱,该文章中解释了管道和文件直接重定向时的区别)
'-o'
'--only-matching'
输出被匹配到的字符串,而不是输出整行.每个被匹配到的字符串都使用零丁的行输出.
'-q'
'--quiet'
'--silent'
静默模式,立即退出,即使遇到了错误.不写任何内容到尺度输出.如果匹配到了内容则退出状态码为0.(‘-q’是POSIX指定的选项.)
'-s'
'--no-messages'
禁止输出因文件不存在或文件没有读权限而产生的差错信息.(‘-s’是POSIX指定的选项.)
(注:由于POSIX和GNU grep的差别性,在可移植性的脚本中,应尽量避免使用”-q”和”-s”,而是使用重定向的方式重定向到/dev/null)
2.1.4 Output Line Prefix Control(控制输出行的前缀)
当输出行有前缀要输出时,它们的次序总是:文件名、行号、字节的偏移量,这个次序不会因为前缀控制选项的次序而改变.
'-b'
'--byte-offset'
Print the 0-based byte offset within the input file before each line of output. If ‘-o’ (‘–only-matching’) is specified,print the offset of the matching part itself. When ‘grep’ runs on MS-DOS or MS-Windows,the printed byte offsets depend on whether the ‘-u’ (‘–unix-byte-offsets’) option is used; see below.
'-H'
'--with-filename'
输出匹配到内容地点文件的文件名.当指定了多个输入文件时,这是默认的.
'-h'
'--no-filename'
制止输出文件名.当只有一个输入文件时,这是默认的.
'--label=LABEL'
Display input actually coming from standard input as input coming from file LABEL. This is especially useful when implementing tools like ‘zgrep’; e.g.:
gzip -cd foo.gz | grep --label=foo -H something
'-n'
'--line-number'
输出匹配内容在文件中的行号,每个文件都零丁从1开始计数.(‘-n’是POSIX指定的选项.)
'-T'
'--initial-tab'
Make sure that the first character of actual line content lies on a tab stop,so that the alignment of tabs looks normal. This is useful with options that prefix their output to the actual content:’-H’,’-n’,and ‘-b’. In order to improve the probability that lines from a single file will all start at the same column,this also causes the line number and byte offset (if present) to be printed in a minimum-size field width.
'-u'
'--unix-byte-offsets'
Report Unix-style byte offsets. This option causes ‘grep’ to report byte offsets as if the file were a Unix-style text file,i.e.,the byte offsets ignore the ‘CR’ characters that were stripped. This will produce results identical to running ‘grep’ on a Unix machine. This option has no effect unless the ‘-b’ option is also used; it has no effect on platforms other than MS-DOS and MS-Windows.
'-Z'
'--null'
在输出文件名时,使用”\0″放在文件名后,这会替换底本使用的字符,如换行符或冒号.例如”grep -lZ”输出的每个文件都在同一行而不是分行,”grep -HZ”使得文件名后没有冒号.
2.1.5 Context Line Control(节制输出行的上下文)
无论下面的选项如何设置,grep都不会多次输出同一行.如果指定了”-o”选项,这些项将失效,并给出一个警告.
'-A NUM'
'--after-context=NUM'
除了输出匹配到的行,还输出匹配到内容的后NUM行.
'-B NUM'
'--before-context=NUM'
除了输出匹配到的行,还输出匹配到内容的前NUM行.
'-C NUM'
'-NUM'
'--context=NUM'
除了输出匹配到的行,还输出匹配到内容的前NUM行和后NUM行.
'--group-separator=STRING'
当使用’-A’,’-B’ or ‘-C’时,使用STRING替代默认的组分隔符.
(注:组分隔符表现匹配到的内容的上下文.例如”-A 2″,在某行匹配到时,还将输出后两行,这是一个组.下一次匹配成功时,如果是在该组之后行匹配上的,则这两组中间默认使用”–“分隔)
'--no-group-separator'
当使用’-A’,不输出任何组分隔符,而是将分歧组相邻输出.
2.1.6 File and Directory Selection(文件和目次的选择)
'-a'
'--text'
Process a binary file as if it were text; this is equivalent to the ‘–binary-files=text’ option.