grep以什么开头及结尾(Linux常用指令---grep(搜索过滤)(转))
本文目录
- Linux常用指令---grep(搜索过滤)(转)
- linux 操作系统下 写出一条grep命令,作用是在文件中查找满足下列条件的行:以大写字母开头,以小写字母结
- 怎样用grep命令去掉空格行和以#开头的行
- linux下查找以什么或什么开头文件命令
- grep和| 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命令,作用是在文件中查找满足下列条件的行:以大写字母开头,以小写字母结
$ cat textAsdfsdfsdfsdfsdfsdfBsdfsdfBsdfsdfAsdfsdf$ textAsdfsdf
怎样用grep命令去掉空格行和以#开头的行
grep -vE ’^#|^$’ filename“^”表示行首,“^”#就是以#开头的行。“$”表示行尾,“^$”就是空行。-E表示“或”的关系。
linux下查找以什么或什么开头文件命令
方法一:直接使用通配符。ls la*这是最方便的一种方法,*表示匹配任何长度的任意字符,通过这样的方式就可以查找到所有以ls开头的文件。如果我们想查找文件名中含有la的文件,只需输入“ls *la*”即可。方法二:我们可以使用管道,将ls的输出送入grep这个程序来实现。ls -1 | grep "^la"-1选项表示将列出的所有文件排成一列,方便grep的匹配(grep按行匹配)。grep的具体使用方法,见,里面有很详细地介绍。
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
更多文章:
nba2k14中文版下载官网(现在在哪可以直接下载NBA2K14呢)
2024年7月11日 16:20
血色修道院掉落(魔兽世界血色修道院血色套装掉落几率及掉落地点准确的)
2024年6月21日 14:26
exagear模拟器下载(exagear模拟器怎么添加游戏)
2024年6月29日 18:38
死神vs火影网页游戏(火影VS海贼王VS死神格斗的网址谁有好像是flash的)
2024年7月15日 23:20