grep以什么开头和结尾(请简述基础正则表达式grep高级参数的使用) | 您所在的位置:网站首页 › grep文件名以什么或什么结尾 › grep以什么开头和结尾(请简述基础正则表达式grep高级参数的使用) |
本文目录请简述基础正则表达式grep高级参数的使用linux中grep命令的详细解释grep和| grep的区别Linux grep、egrep使用命令详解linux 操作系统下 写出一条grep命令,作用是在文件中查找满足下列条件的行:以大写字母开头,以小写字母结浅显易懂的grep命令详解Linux常用指令---grep(搜索过滤)(转)linux命令里,grep * 是什么意思Linux下Grep命令的详细使用方法linux查找内容命令请简述基础正则表达式grep高级参数的使用 常用参数:-v排除匹配内容,-e支持扩展的正则表达式,-i忽略大小写,-o输出匹配的内容(只是一块,不是行),--color=auto 匹配内容显示颜色,-n 在行首显示行号。特殊字符注意事项:^(尖括号)word :表示搜索以word开头的内容。word$ 表示搜索以word结尾的内容。^$ 表示的是空行,不是空格。. 代表且只能代表任意一个字符。非正则表达式其他功能(当前目录,加载文件)\ 转义字符,让有着特殊身份意义的字符,脱掉马甲,还原原型。例如\.只表示原始小数点意义。* 表示重复0个或多个前面的一个字符。不代表所有。.* 表示匹配所有的字符。^.*表示以任意字符开头。。 ^在中括号里面是非的意思,不包含之意。意思就是不包含a或b或c的行。{n,m} 表示重复n到m次前一个字符。{n}至少n次,多了不限。{n}N次,{,m}至多m次,少了不限。注:使用grep或sed要对{}转义。即\{\}.egrep就不需要转义了。 如果有什么不懂的话可以去看看《Linux就该这么学》这本书,非常适合新手学习Linux。 linux中grep命令的详细解释linxu下的grep命令其实是一个搜索文件文本的工具。下面由我为大家整理了linux的grep命令的详细解释的相关知识,希望对大家有帮助! 一、linux中的grep命令的详细解释 1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 2.格式 grep 3.主要参数 主要参数: -c:只输出匹配行的计数。 -I:不区分大 小写(只适用于单字符)。 -h:查询多文件时不显示文件名。 -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及 行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。 pattern正则表达式主要参数: \: 忽略正则表达式中特殊字符的原有含义。 ^:匹配正则表达式的开始行。 $: 匹配正则表达式的结束行。 \《:从匹配正则表达 式的行开始。 \》:到匹配正则表达式的行结束。 即A符合要求 。 ,即A、B、C一直到Z都符合要求 。 。:所有的单个字符。 * :有字符,长度可以为0。 二、linux中的grep命令的详解实例 1.grep命令使用简单实例 $ grep ‘test’ d* 显示所有以d开头的文件中包含 test的行。 $ grep ‘test’ aa bb cc 显示在aa,bb,cc文件中匹配test的行。 $ grep ‘\{5\}’ aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。 $ grep ‘w\(es\)t.*\1′ aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。 2.grep命令使用复杂实例 假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件: $ grep magic /usr/src/Linux/Doc/* sysrq.txt:* How do I enable the magic SysRQ key? sysrq.txt:* How do I use the magic SysRQ key? 其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。 默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出: grep: sound: Is a directory 这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法: 明确要求搜索子目录:grep -r 或忽略子目录:grep -d skip 如果有很多 输出时,您可以通过管道将其转到’less’上阅读: $ grep magic /usr/src/Linux/Documentation/* | less 这样,您就可以更方便地阅读。 有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 《CTRL c》 ,然后再试。 下面还有一些有意思的命令行参数: grep -i pattern files :不区分大小写地搜索。默认情况区分大小写, grep -l pattern files :只列出匹配的文件名, grep -L pattern files :列出不匹配的文件名, grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’), grep -C number pattern files :匹配的上下文分别显示行, grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行, grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。 grep -n pattern files 即可显示行号信息 grep -c pattern files 即可查找总行数 这里还有些用于搜索的特殊符号: \《 和 \》 分别标注单词的开始与结尾。 例如: grep man * 会匹配 ‘Batman’、’manic’、’man’等, grep ‘\《man’ * 匹配’manic’和’man’,但不是’Batman’, grep ‘\《man\》’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。 ‘^’:指匹配的字符串在行首, ‘$’:指匹配的字符串在行 尾, grep和| grep的区别grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。 grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。 Grep命令中允许指定的串语句是一个规则表达式,这是一种允许使用某些特殊键盘字符的指定字符串的方法,这种方法中的特殊键盘字符可以用于代表其他字符也可以进一步定义模式匹配工作方式。例如:grep “.*hood“ essay1。该命令将在文件essay1中搜索,显示出包含带有字符串hood的字的每一行。命令行中的点表示的是hood之前可以有任意字符,星号指的是在字符串之前点号所表示的任意字符可以有任意个(其中的双引号是可有可无的,但是当语句中包含短语或者空格时就必须加双引号)。 -l 列出文件内容符合指定的范本样式的文件名称。 同理more和| more也是一样。 扩展资料: GREP 表达符集 ^ 锚定行的开始 如:’^grep’匹配所有以grep开头的行。 $ 锚定行的结束 如:’grep$’匹配所有以grep结尾的行。 . 匹配一个非换行符(’\n’)的字符如:’gr.p’匹配gr后接一个任意字符,然后是p。 * 匹配零个或多个先前字符 如:’ *grep’ (注意*前有空格)匹配所有零个或多个空格后紧跟grep的行,需要用egrep 或者grep带上 -E 选项。 .*一起用代表任意字符。 匹配一个指定范围内的字符,如’rep’匹配Grep和grep。 匹配一个不在指定范围内的字符,如:’rep’匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。 \(..\) 标记匹配字符,如’\(love\)’,love被标记为1。 \《 锚定单词的开始,如:’\《grep’匹配包含以grep开头的单词的行。 \》 锚定单词的结束,如’grep\》’匹配包含以grep结尾的单词的行。 x\{m\} 重复字符x,m次,如:’o\{5\}’匹配包含5个o的行。 x\{m,\} 重复字符x,至少m次,如:’o\{5,\}’匹配至少有5个o的行。 x\{m,n\} 重复字符x,至少m次,不多于n次,如:’o\{5,10\}’匹配5--10个o的行。 \w 匹配文字和数字字符,也就是,如:’G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p。 \W \w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b 单词锁定符,如: ’\bgrep\b’只匹配grep。 用于egrep和 grep -E的元字符扩展集 \+ 匹配一个或多个先前的字符。如:’\+able’,匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。 \? 匹配零个或一个先前的字符。如:’gr\?p’匹配gr后跟一个或没有字符,然后是p的行。 a\|b\|c 匹配a或b或c。如:grep|sed匹配grep或sed \(\) 分组符号,如:love\(ab\le\|rs\)ov\+匹配loveable或lovers,匹配一个或多个ov。 POSIX字符类 为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如。在linux下的grep除fgrep外,都支持POSIX的字符类。 文字数字字符 文字字符 数字字符 非空字符(非空格、控制字符) 小写字符 控制字符 非空字符(包括空格) 标点符号 所有空白字符(新行,空格,制表符) 大写字符 十六进制数字(0-9,a-f,A-F) 命令选项 -? 同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。 -a, --text 等价于匹配text,用于(Binary file (standard input) matches)报错 -b,--byte-offset 打印匹配行前面打印该行所在的块号码。 -c,--count 只打印匹配的行数,不显示匹配的内容。 -f File,--file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。 -h,--no-filename 当搜索多个文件时,不显示匹配文件名前缀。 -i,--ignore-case 忽略大小写差别。 -o, --only-matching 只显示正则表达式匹配的部分。(show only the part of a line matching PATTERN) -q,--quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。 -l,--files-with-matches 打印匹配模板的文件清单。 -L,--files-without-match 打印不匹配模板的文件清单。 -n,--line-number 在匹配的行前面打印行号。 -s,--silent 不显示关于不存在或者无法读取文件的错误信息。 -v,--revert-match 反检索,只显示不匹配的行。 -w,--word-regexp 如果被\《和\》引用,就把表达式做为一个单词搜索。 -R, -r, --recursive 递归的读取目录下的所有文件,包括子目录。 比如grep -R ’pattern’ test会在 test 及其子目录下的所有文件中,匹配 pattern。 -V,--version 显示软件版本信息。 -A6 查找某些字符的内容,并下延伸6行 -B6 查找某些字符的内容,并上延伸6行 -C1 查找某些字符的内容,并上和向下各延伸1行 这几行后面的数字直接影响延伸数量,并以--符号分割搜索行的结果 实例 要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。 $ ls -l | grep ’^a’ 通过管道过滤ls -l输出的内容,只显示以a开头的行。 $ grep ’test’ d* 显示所有以d开头的文件中包含test的行。 $ grep ’test’ aa bb cc 显示在aa,bb,cc文件中匹配test的行。 $ grep ’\{5\}’ aa 显示所有包含每个字符串有5个连续小写字符的字符串的行。 $ grep ’w\(es\)t.*\1’ aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用“\“号进行转义,直接写成’w(es)t.*\1’就可以了。 注意 在某些机器上,要使用-E参数才能够进行逻辑匹配(详见下) grep “a|b“ (匹配包含字符样式为“a|b“的行) grep -E “a|b“ (匹配包含字符样式为“a“或“b“的行) man grep里面关于-E参数的说明是 -E Treats each pattern specified as an extended regular expression (ERE). A NULL value for the ERE matches every line. Note: The grep command with the -E flag is the same as the egrep command, except that error and usage messages are different and the -s flag functions differently. 拓展命令 egrep 命令,搜索文件获得模式。 egrep 命令会在输入文件(缺省值为标准输入)中搜索与用 Pattern 参数指定的模式相匹配的行。这些模式是完整的正则表达式就像在 ed 命令中的那样(除了 \ (反斜杠)和 \\ (双反斜杠))。下列规则也应用于 egrep 命令: * 一个正则表达式后面带一个 + (加号)会匹配一个或多个的正则表达式。 * 一个正则表达式后面带一个 ? (问号)会匹配零个或一个该正则表达式。 * 由 | (竖线)或者换行符隔开的多个正则表达式会匹配与任何一个正则表达式所匹配的字符串。 * 一个正则表达式可以被包括在“()”(括弧)中进行分组。 换行符将不会被正则表达式匹配。 运算符的优先顺序是 , *, ?, +, 合并, | 和换行符。 注意: egrep 命令与 grep 命令带 -E 标志是一样的,除了错误消息和使用消息不同以及 -s 标志的功能不同之外。 egrep 命令会显示包含该匹配行的文件,如果您指定了多于一个 File 参数的话。 对 shell 有特殊含义的字符($, *, fgrep命令, 为文件搜索文字字符串。 fgrep命令搜索 File 参数指定的输入文件(缺省为标准输入)中的匹配模式的行。fgrep命令特别搜索 Pattern 参数,它们是固定的字符串。如果在 File 参数中指定一个以上的文件fgrep命令将显示包含匹配行的文件。 fgrep命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep命令使用快速的压缩算法。$, *, [, |, (, ) 和 \ 等字符串被fgrep命令按字面意思解释。这些字符并不解释为正则表达式,但它们在 grep 和 egrep 命令中解释为正则表达式。 因为这些字符对于 shell 有特定的含义,完整的字符串应该加上单引号(‘ ... ’)。 如果没有指定文件,fgrep命令假定标准输入。一般,找到的每行都复制到标准输出中去。如果不止一个输入文件,则在找到的每行前打印文件名。 Unix命令行程序和内建指令(更多) 文件系统 ▪ cat▪ cd▪ chmod▪ chown▪ chgrp▪ cksum▪ cmp▪ cp▪ du▪ df▪ fsck▪ fuser▪ ln▪ ls▪ lsattr▪ lsof▪ mkdir▪ mount▪ mv▪ pwd▪ rm▪ rmdir▪ split▪ touch▪ umask 程序 ▪ at▪ bg▪ chroot▪ cron▪ exit▪ fg▪ jobs▪ kill▪ killall▪ nice▪ pgrep▪ pidof▪ pkill▪ ps▪ pstree▪ sleep▪ time▪ top▪ wait 使用环境 ▪ env▪ finger▪ id▪ logname▪ mesg▪ passwd▪ su▪ sudo▪ uptime▪ w▪ wall▪ who▪ whoami▪ write 文字 ▪ awk▪ comm▪ cut▪ ed▪ ex▪ fmt▪ head▪ iconv▪ join▪ less▪ more▪ paste▪ sed▪ sort▪ strings▪ talk▪ tac▪ tail▪ tr▪ uniq▪ vi▪ wc▪ xargs Shell 程序 ▪ alias▪ basename▪ dirname▪ echo▪ expr▪ false▪ printf▪ test▪ true▪ unset 网络 ▪ inetd▪ netstat▪ ping▪ rlogin▪ netcat▪ traceroute 搜索 ▪ find▪ grep▪ locate▪ whereis▪ which 杂项 ▪ apropos▪ banner▪ bc▪ cal▪ clear▪ date▪ dd▪ file▪ help▪ info▪ size▪ lp▪ man▪ history▪ tee▪ tput▪ 参考资料来源:百度百科-GREP Linux grep、egrep使用命令详解grep egrep区别 grep 默认不支持扩展 但可以通过-E 选择来支持扩展正则 egrep 支持扩展正则 关于正则与扩展正则的区别可以看我另一篇shell 正则的介绍 文件处理顺序 以行为单位,逐行进行处理 默认只输出与表达式相匹配的文本行 基本用法 - 格式1:egrep ’正则表达式’ 文件 - 格式2:前置命令 | egrep ’正则表达式’ • egrep命令工具 (扩展正则命令) • 常用命令选项 •grep 正则表达式,用来查找过滤文档的工具符号 grep “root“ user //在user文档中查找有单词root的行 grep “^root“ user //在user文档中查找以单词root开头的行 grep “bash “ user //查找空行 grep “^ “ user //查找以空格开头的行 grep ““ user //查找字母r或者o或者t grep “roo“ user //查找root或者roon grep ““ user //查找字母r或者o或者t之外的内容 grep ““ user //查找小写字母 grep ““ user //查找大写字母 grep ““ user //查找所有字母 grep ““ user //查找数字 grep “r..t“ user //查找以r开头t结尾中间有2个任意字符的单词 grep “r. “ user //查找以r开头后面任意字符 相当手通配符 grep “ro*“ user //查找以r开头后面有或没有字母o的单词,o可以出现任意次 grep “o{1,2}“ user //查找o出现1次到2次的行 grep “o{2,3}“ user //查找o出现2次到3次的行 grep “o{2}“ user //查找o出现2次的行 grep “o{1,} “ user //查找o出现1次以及1次以上 grep “(:0){2}“ user //查找:0(数字零)连续出现2次的行 扩展正则 egrep “o+“ user //查找o出现1次以及1次以上 egrep “o?“ user //查找o出现0次或1次 egrep “o{1,2}“ user //查找o出现1次到2次的行 egrep “o{2,3}“ user //查找o出现2次到3次的行 egrep “o{2}“ user //查找o出现2次的行 egrep “o{1,}“ user //查找o出现1次以及1次以上 egrep “(:0){2}“ user //查找:0(数字零)连续出现2次的行 egrep “bash|nologin“ user //查找bash或者nologin egrep “\bthe\b“ a //查找单词the,前后是空格或者特殊符号 案例: 正则表达式匹配练习 1)典型的应用场合:grep、egrep检索文本行 grep命令不带-E选项时,支持基本正则匹配模式。比如“word”关键词检索、“^word”匹配以word开头的行、“word$”匹配以word结尾的行……等等。 输出以“r”开头的用户记录: 输出以“localhost”结尾的行: 若希望在grep检索式同时组合多个条件,比如输出以“root”或者以“daemon”开头的行: 而若若使用grep -E或egrep命令,可支持扩展正则匹配模式,能够自动识别 |、{} 等扩展正则表达式中的特殊字符,用起来更加方便,比如: 或者 使用grep -E 与 使用egrep命令完全等效,推荐使用后者,特别是涉及到复杂的正则表达式的时候。 2)grep、egrep命令的-q选项 选项 -q 表示 quiet(静默)的意思,结合此选项可以只做检索而并不输出,通常在脚本内用来识别查找的目标是否存在,通过返回状态 $? 来判断,这样可以忽略无关的文本信息,简化脚本输出。 比如,检查/etc/hosts文件内是否存在192.168.4.4的映射记录,如果存在则显示“YES”,否则输出“NO”,一般会执行: 这样grep的输出信息和脚本判断后的提示混杂在一起,用户不易辨别,所以可以改成以下操作: 是不是清爽多了,从上述结果也可以看到,使用 -q 选项的效果与使用 &》 /dev/null的效果类似。 3)基本元字符 ^、$ —— 匹配行首、行尾 输出注释的配置行(以#开头的行): 统计本地用户中登录Shell为“/sbin/nologin”的用户个数: 提示: -m10仅在文件的前10行中过滤,后面的行不再过滤。 结合 -c 选项输出匹配的行数 使用 -c 选项可输出匹配行数,这与通过管道再 wc -l的效果是相同的,但是写法更简便。比如,统计使用“/bin/bash”作为登录Shell的正常用户个数,可执行: 或者 4)基本元字符 . —— 匹配任意单个字符 以/etc/rc.local文件为例,确认文本内容: 输出/etc/rc.local文件内的空行(用 –v 选项将条件取反): 5)基本元字符 +、?、 —— 目标出现的次数* 还以/etc/rc.local文件为例: 输出包括 f、ff、ff、……的行,即“f”至少出现一次: 输出包括init、initial的行,即末尾的“ial”最多出现一次(可能没有): 输出包括stu、stuf、stuff、stufff、……的行,即末尾的“f”可出现任意多次,也可以没有。重复目标只有一个字符时,可以不使用括号: 输出所有行,单独的“.*”可匹配任意行(包括空行): 输出/etc/passwd文件内“r”开头且以“nologin”结尾的用户记录,即中间可以是任意字符: 6)元字符 {} —— 限定出现的次数范围 创建一个练习用的测试文件: 输出包括ababab的行,即“ab”连续出现3次: 输出包括abab、ababab、abababab的行,即“ab”连续出现2~4次: 输出包括ababab、abababab、……的行,即“ab”最少连续出现3次: 7)元字符 —— 匹配范围内的单个字符 还以前面的测试文件bracet.txt为例: 输出包括abc、abd的行,即前两个字符为“ab”,第三个字符只要是c、d中的一个就符合条件: 输出包括大写字母的行,使用匹配连续范围: 8)单词边界匹配 以文件/etc/rc.local为例: 输出包括单词“init”的行,文件中“initialization”不合要求: 或者: 输出包括以“ll”结尾的单词的行,使用 》 匹配单词右边界: 或者: 9)多个条件的组合 通过dmesg启动日志查看蓝牙设备、网卡设备相关的信息: linux 操作系统下 写出一条grep命令,作用是在文件中查找满足下列条件的行:以大写字母开头,以小写字母结$ cat textAsdfsdfsdfsdfsdfsdfBsdfsdfBsdfsdfAsdfsdf$ textAsdfsdf 浅显易懂的grep命令详解grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。 将/etc/passwd,有出现 root 的行取出来 或 将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号 在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 此时那个好用的 alias 就得来处理一下啦!你可以在 ~/.bashrc 内加上这行:『alias grep=’grep --color=auto’』再以『 source ~/.bashrc 』来立即生效即可喔! 这样每次运行 grep 他都会自动帮你加上颜色显示啦 将/etc/passwd,将没有出现 root 的行取出来 将/etc/passwd,将没有出现 root 和nologin的行取出来 用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,要将捉到的关键字显色,且加上行号来表示: 在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 此时那个好用的 alias 就得来处理一下啦!你可以在 ~/.bashrc 内加上这行:『alias grep=’grep --color=auto’』再以『 source ~/.bashrc 』来立即生效即可喔! 这样每次运行 grep 他都会自动帮你加上颜色显示啦 用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,在关键字所在行的前两行与后三行也一起捉出来显示 这几个命令很实用,是查找文件的利器。 字符类的搜索:如果我想要搜寻 test 或 taste 这两个单词时,可以发现到,其实她们有共通的 ’t?st’ 存在~这个时候,我可以这样来搜寻: 其实 里面不论有几个字节,他都谨代表某『一个』字节, 所以,上面的例子说明了,我需要的字串是『tast』或『test』两个字串而已! 字符类的反向选择 :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g,如下 第 2,3 行没有疑问,因为 foo 与 Foo 均可被接受! 但是第 18 行明明有 google 的 goo 啊~别忘记了,因为该行后面出现了 tool 的 too 啊!所以该行也被列出来~ 也就是说, 18 行里面虽然出现了我们所不要的项目 (goo) 但是由於有需要的项目 (too) , 因此,是符合字串搜寻的喔! 至於第 19 行,同样的,因为 goooooogle 里面的 oo 前面可能是 o ,例如: go(ooo)oogle ,所以,这一行也是符合需求的! 字符类的连续:再来,假设我 oo 前面不想要有小写字节,所以,我可以这样写 oo , 但是这样似乎不怎么方便,由於小写字节的 ASCII 上编码的顺序是连续的, 因此,我们可以将之简化为底下这样: 也就是说,当我们在一组集合字节中,如果该字节组是连续的,例如大写英文/小写英文/数字等等, 就可以使用。 我们要取得有数字的那一行,就这样: 行首字符:如果我想要让 the 只在行首列出呢? 这个时候就得要使用定位字节了!我们可以这样做: 此时,就只剩下第 12 行,因为只有第 12 行的行首是 the 开头啊~此外, 如果我想要开头是小写字节的那一行就列出呢?可以这样: 如果我不想要开头是英文字母,则可以是这样: ^ 符号,在字符类符号(括号 之外则代表定位在行首的意义! 那如果我想要找出来,行尾结束为小数点 (.) 的那一行: 特别注意到,因为小数点具有其他意义(底下会介绍),所以必须要使用转义字符()来加以解除其特殊意义! 找出空白行: 因为只有行首跟行尾 (^$),所以,这样就可以找出空白行啦! 这两个符号在正则表达式的意义如下: . (小数点):代表『一定有一个任意字节』的意思;* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态 假设我需要找出 g??d 的字串,亦即共有四个字节, 起头是 g 而结束是 d ,我可以这样做: 因为强调 g 与 d 之间一定要存在两个字节,因此,第 13 行的 god 与第 14 行的 gd 就不会被列出来啦! 如果我想要列出有 oo, ooo, oooo 等等的数据, 也就是说,至少要有两个(含) o 以上,该如何是好? 因为 * 代表的是『重复 0 个或多个前面的 RE 字符』的意义, 因此,『o*』代表的是:『拥有空字节或一个 o 以上的字节』,因此,『 grep -n ’o*’ regular_express.txt 』将会把所有的数据都列印出来终端上! 当我们需要『至少两个 o 以上的字串』时,就需要 ooo* ,亦即是: 如果我想要字串开头与结尾都是 g,但是两个 g 之间仅能存在至少一个 o ,亦即是 gog, goog, gooog…. 等等,那该如何? 如果我想要找出 g 开头与 g 结尾的行,当中的字符可有可无 因为是代表 g 开头与 g 结尾,中间任意字节均可接受,所以,第 1, 14, 20 行是可接受的喔! 这个 .* 的 RE 表示任意字符是很常见的. 如果我想要找出『任意数字』的行?因为仅有数字,所以就成为: 我们可以利用 . 与 RE 字符及 * 来配置 0 个到无限多个重复字节, 那如果我想要限制一个范围区间内的重复字节数呢? 举例来说,我想要找出两个到五个 o 的连续字串,该如何作?这时候就得要使用到限定范围的字符 {} 了。 但因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用字符 \ 来让他失去特殊意义才行。 至於 {} 的语法是这样的,假设我要找到两个 o 的字串,可以是: 假设我们要找出 g 后面接 2 到 5 个 o ,然后再接一个 g 的字串,他会是这样: 如果我想要的是 2 个 o 以上的 goooo….g 呢?除了可以是 gooo*g ,也可以是: 使用扩展grep的主要好处是增加了额外的正则表达式元字符集。 打印所有包含NW或EA的行。如果不是使用egrep,而是grep,将不会有结果查出。 对于标准grep,如果在扩展元字符前面加\,grep会自动启用扩展选项-E。 搜索所有包含一个或多个3的行。 搜索所有包含0个或1个小数点字符的行。 搜索一个或者多个连续的no的行。 fgrep 查询速度比grep命令快,但是不够灵活:它只能找固定的文本,而不是规则表达式。 如果你想在一个文件或者输出中找到包含星号字符的行 或 Linux常用指令---grep(搜索过滤)(转)Linux常用指令---grep(搜索过滤) (转) Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。 grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。 1.命令格式: grep pattern file 2.命令功能: 用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。 3.命令参数: -a --text #不要忽略二进制的数据。 -A《显示行数》 --after-context=《显示行数》 #除了显示符合范本样式的那一列之外,并显示该行之后的内容。 -b --byte-offset #在显示符合样式的那一行之前,标示出该行第一个字符的编号。 -B《显示行数》 --before-context=《显示行数》 #除了显示符合样式的那一行之外,并显示该行之前的内容。 -c --count #计算符合样式的列数。 -C《显示行数》 --context=《显示行数》或-《显示行数》 #除了显示符合样式的那一行之外,并显示该行之前后的内容。 -d 《动作》 --directories=《动作》 #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。 -e《范本样式》 --regexp=《范本样式》 #指定字符串做为查找文件内容的样式。 -E --extended-regexp #将样式为延伸的普通表示法来使用。 -f《规则文件》 --file=《规则文件》 #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。 -F --fixed-regexp #将样式视为固定字符串的列表。 -G --basic-regexp #将样式视为普通的表示法来使用。 -h --no-filename #在显示符合样式的那一行之前,不标示该行所属的文件名称。 -H --with-filename #在显示符合样式的那一行之前,表示该行所属的文件名称。 -i --ignore-case #忽略字符大小写的差别。 -l --file-with-matches #列出文件内容符合指定的样式的文件名称。 -L --files-without-match #列出文件内容不符合指定的样式的文件名称。 -n --line-number #在显示符合样式的那一行之前,标示出该行的列数编号。 -q --quiet或--silent #不显示任何信息。 -r --recursive #此参数的效果和指定“-d recurse”参数相同。 -s --no-messages #不显示错误信息。 -v --revert-match #显示不包含匹配文本的所有行。 -V --version #显示版本信息。 -w --word-regexp #只显示全字符合的列。 -x --line-regexp #只显示全列符合的列。 -y #此参数的效果和指定“-i”参数相同。4.规则表达式: grep的规则表达式: ^ #锚定行的开始 如:’^grep’匹配所有以grep开头的行。 $ #锚定行的结束 如:’grep$’匹配所有以grep结尾的行。 . #匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。 * #匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行。 .* #一起用代表任意字符。 rep’匹配Grep和grep。 rep’匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 \(..\) #标记匹配字符,如’\(love\)’,love被标记为1。 \《 #锚定单词的开始,如:’\ \》 #锚定单词的结束,如’grep\》’匹配包含以grep结尾的单词的行。 x\{m\} #重复字符x,m次,如:’0\{5\}’匹配包含5个o的行。 x\{m,\} #重复字符x,至少m次,如:’o\{5,\}’匹配至少有5个o的行。 x\{m,n\} #重复字符x,至少m次,不多于n次,如:’o\{5,10\}’匹配5--10个o的行。 \w #匹配文字和数字字符,也就是,如:’G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p。 \W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b #单词锁定符,如: ’\bgrep\b’只匹配grep。 POSIX字符: 为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如。在linux下的grep除fgrep外,都支持POSIX的字符类。 #文字数字字符 #文字字符 #数字字符 #非空字符(非空格、控制字符) #小写字符 #控制字符 #非空字符(包括空格) #标点符号 #所有空白字符(新行,空格,制表符) #大写字符 #十六进制数字(0-9,a-f,A-F) 5.使用实例: 实例1:查找指定进程 命令: ps -ef|grep svn 输出: # ps -ef|grep svn root 4943 1 0 Dec05 ? 00:00:00 svnserve -d -r /opt/svndata/grape/ root 16867 16838 0 19:53 pts/0 00:00:00 grep svn # 说明: 第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。 实例2:查找指定进程个数 命令: ps -ef|grep svn -c ps -ef|grep -c svn 输出: # ps -ef|grep svn -c 2 # ps -ef|grep -c svn 2 # 说明: 实例3:从文件中读取关键词进行搜索 命令: cat test.txt | grep -f test2.txt 输出: # cat test.txt hnlinux peida.cnblogs.com ubuntu ubuntu linux redhat Redhat linuxmint # cat test2.txt linux Redhat # cat test.txt | grep -f test2.txt hnlinux ubuntu linux Redhat linuxmint # 说明: 输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行 实例3:从文件中读取关键词进行搜索 且显示行号 命令: cat test.txt | grep -nf test2.txt 输出: # cat test.txt hnlinux peida.cnblogs.com ubuntu ubuntu linux redhat Redhat linuxmint # cat test2.txt linux Redhat # cat test.txt | grep -nf test2.txt 1:hnlinux 4:ubuntu linux 6:Redhat 7:linuxmint # 说明: 输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号 实例5:从文件中查找关键词 命令: grep ’linux’ test.txt 输出: # grep ’linux’ test.txt hnlinux ubuntu linux linuxmint # grep -n ’linux’ test.txt 1:hnlinux 4:ubuntu linux 7:linuxmint # 说明: 实例6:从多个文件中查找关键词 命令: grep ’linux’ test.txt test2.txt 输出: # grep -n ’linux’ test.txt test2.txt test.txt:1:hnlinux test.txt:4:ubuntu linux test.txt:7:linuxmint test2.txt:1:linux # grep ’linux’ test.txt test2.txt test.txt:hnlinux test.txt:ubuntu linux test.txt:linuxmint test2.txt:linux # 说明: 多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上“:“作为标示符 实例7:grep不显示本身进程 命令: ps aux|grep \sh ps aux | grep ssh | grep -v “grep“ 输出: # ps aux|grep ssh root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: root@pts/0 root 16901 0.0 0.0 61180 764 pts/0 S+ 20:31 0:00 grep ssh
sh root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: root@pts/0 # ps aux | grep ssh | grep -v “grep“ root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: root@pts/0 说明: 实例8:找出已u开头的行内容 命令: cat test.txt |grep ^u 输出: # cat test.txt |grep ^u ubuntu ubuntu linux # 说明: 实例9:输出非u开头的行内容 命令: cat test.txt |grep ^ 输出:
hnlinux peida.cnblogs.com redhat Redhat linuxmint # 说明: 实例10:输出以hat结尾的行内容 命令: cat test.txt |grep hat$ 输出: # cat test.txt |grep hat$ redhat Redhat # 说明: 实例11:输出ip地址 命令: ifconfig eth0|grep -E “(“ 输出: \{1,3\}“ inet addr:192.168.120.204 Bcast:192.168.120.255 Mask:255.255.255.0 “ inet addr:192.168.120.204 Bcast:192.168.120.255 Mask:255.255.255.0 # 说明: 实例12:显示包含ed或者at字符的内容行 命令: cat test.txt |grep -E “ed|at“ 输出: # cat test.txt |grep -E “peida|com“ peida.cnblogs.com # cat test.txt |grep -E “ed|at“ redhat Redhat # 说明: 实例13:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行 命令: grep ’\{7\}’ *.txt 输出: \{7\}’ *.txt test.txt:hnlinux test.txt:peida.cnblogs.com test.txt:linuxmint #实例14:日志文件过大,不好查看,我们要从中查看自己想要的内容,或者得到同一类数据,比如说没有404日志信息的 命令: grep ’.’ access1.log|grep -Ev ’404’ 》 access2.log grep ’.’ access1.log|grep -Ev ’(404|/photo/|/css/)’ 》 access2.log grep ’.’ access1.log|grep -E ’404’ 》 access2.log 输出: # grep “.”access1.log|grep -Ev “404” 》 access2.log 说明:上面3句命令前面两句是在当前目录下对access1.log文件进行查找,找到那些不包含404的行,把它们放到access2.log中,后面去掉’v’,即是把有404的行放入access2.log linux命令里,grep * 是什么意思任意一个字节 . 与重复字节 *这两个符号在正则表达式的意义如下:. (小数点):代表『一定有一个任意字节』的意思;* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态假设我需要找出 g??d 的字串,亦即共有四个字节, 起头是 g 而结束是 d ,我可以这样做:# grep -n ’g..d’ regular_express.txt1:“Open Source“ is a good mechanism to develop programs.9:Oh! The soup taste good.16:The world 《Happy》 is the same with “glad“.因为强调 g 与 d 之间一定要存在两个字节,因此,第 13 行的 god 与第 14 行的 gd 就不会被列出来啦!如果我想要列出有 oo, ooo, oooo 等等的数据, 也就是说,至少要有两个(含) o 以上,该如何是好?因为 * 代表的是『重复 0 个或多个前面的 RE 字符』的意义, 因此,『o*』代表的是:『拥有空字节或一个 o 以上的字节』,因此,『 grep -n ’o*’ regular_express.txt 』将会把所有的数据都列印出来终端上!当我们需要『至少两个 o 以上的字串』时,就需要 ooo* ,亦即是:# grep -n ’ooo*’ regular_express.txt1:“Open Source“ is a good mechanism to develop programs.2:apple is my favorite food.3:Football game is not use feet only.9:Oh! The soup taste good.18:google is the best tools for search keyword.19:goooooogle yes!如果我想要字串开头与结尾都是 g,但是两个 g 之间仅能存在至少一个 o ,亦即是 gog, goog, gooog.... 等等,那该如何?# grep -n ’goo*g’ regular_express.txt18:google is the best tools for search keyword.19:goooooogle yes!如果我想要找出 g 开头与 g 结尾的行,当中的字符可有可无# grep -n ’g.*g’ regular_express.txt1:“Open Source“ is a good mechanism to develop programs.14:The gd software is a library for drafting programs.18:google is the best tools for search keyword.19:goooooogle yes!20:go! go! Let’s go.因为是代表 g 开头与 g 结尾,中间任意字节均可接受,所以,第 1, 14, 20 行是可接受的喔! 这个 .* 的 RE 表示任意字符是很常见的. Linux下Grep命令的详细使用方法在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。 假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件: $ grep magic /usr/src/linux/Documentation/* sysrq.txt:* How do I enable the magic SysRQ key? sysrq.txt:* How do I use the magic SysRQ key? 其中文件‘sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。 默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录,‘grep’会以如下形式列出: grep: sound: Is a directory 这可能会使‘grep’的输出难于阅读。这里有两种解决的办法: 明确要求搜索子目录:grep -r 或忽略子目录:grep -d skip 当然,如果预料到有许多输出,您可以通过 管道 将其转到‘less’上阅读: $ grep magic /usr/src/linux/Documentation/* | less 这样,您就可以更方便地阅读。 有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,‘grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 ,然后再试。 下面是一些有意思的命令行参数: grep -i pattern files :不区分大小写地搜索。默认情况区分大小写, grep -l pattern files :只列出匹配的文件名, grep -L pattern files :列出不匹配的文件名, grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’), grep -C number pattern files :匹配的上下文分别显示行, grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行, grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。 这里还有些用于搜索的特殊符号: \《 和 \》 分别标注单词的开始与结尾。 例如: grep man * 会匹配 ‘Batman’、‘manic’、‘man’等, grep ’\’>grep ’\’ 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。 ’^’:指匹配的字符串在行首, ’$’:指匹配的字符串在行尾, 如果您不习惯命令行参数,可以试试图形界面的‘grep’,如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 :-) 。如果您只是需要更清楚的输出,不妨试试 fungrep 。\> linux查找内容命令find,用于在文件树中查找文件并作相应的处理 -name:按照文件名查找文件 -perm:按照文件权限查找文件 -user:按照文件属主来查找文件 -size:按照指定的文件大小查找文件【+n:大于,-n:小于,n:等于】 -group:按照文件所属的组来查找文件 -mtime《-n》《+n》:按照文件更改时间来查找文件,-n表示n天之内,+n表示n天以前 -newer file1 file2:查找更改时间在file1和file2之间的文件 例如: find -mtime -2:查找48小时修改过的文件 find -name “.log“:查找当前目录以“.log“结尾的文件 find /opt/soft/test -perm 777:查找指定目录下权限为777的文件 find -type f -name “*.log“:查找当前目录下以“.log“结尾的普通文件 find -type d | sort:查找当前所有目标目录并排序 find /home/wansw -size +20M:查找大于20M的文件 locate指令,可以快速定位文件路径,利用事先建立的系统中的所有文件名称和路径的locate数据库,无需遍历整个文件系统,查询速度较快,为了保证查询准确性,需要定期更新。《Linux就该这么学》 updatedb:第一次运行前,创建locate数据库 grep,用于过滤/搜索指定字符串。可以使用正则表达式,能配合多种命令使用。 用法:grep 【选项】 查找内容 源文件 -A:显示符合的行及之后的内容 -B:显示符合的行及之前的内容 -C:显示符合的行及前后的内容 -c:计算符合的行数目 -n:显示匹配行和行号 -i:忽略大小写 规则表达式 :’grep’表示匹配所有以grep开头的行 ’表示匹配所有以grep结尾的行 .:’gr.p’表示匹配’gr’后面接任意字符然后是’p’ :’grep’表示匹配一个或多个空格后紧跟grep的行 rep表示匹配Grep与grep rep表示匹配不以A-F、H-Z开头并紧跟rep的行 例如(grep命令大多数时候多要和别的命令一起使用才有意义): ps -ef | grep -c SVN:查找指定的进程的个数 cat test.txt | grep -f test2.txt:从text2.txt中读取关键字后在test.txt中搜索 cat test.txt | grep nf text2.txt:从text2.txt中读取关键字后在text.txt中搜索并显示行号 grep ’linux’ text.txt test2.txt:从多个文件中搜索关键字’linux’ cat test.txt | grep -E ’ed|at’:显示包含ed或at的行 |
CopyRight 2018-2019 实验室设备网 版权所有 |