关于grep-e的一个使用问题

管道与grep查询今天麟遇到一个问题让我学到很多东西。他想在当前目录及起子目录下查找一个包含“CHAT_MESS”的文件,于是,他输入以下命令
find -name "*.*" | grep "CHAT_MESS"
首先分析一下这条语句,find是查找命令,
1. 只要加上-name文件名选项系列(例如-path,-regex等)即可实现递归查找;
2. -name代表查找名字,支持通配符,不支持正则表达式.所以*代表任意长的任意字符,"*.*"代表包含点符号的所有字符
3. 查找到的文件通过管道符传递给grep
4. grep通过模式"CHAT_MESS"查找文件
但,结果什么都没输入.起初我怀疑是管道传输的问题,我用了grep取反命令,
find -name "*.*" | grep -v "CHAT_MESS"
但正确输出结果,后来突然想起来,可以是grep把find的查询结果当作一个文件来对待,查看了man文档,果真如此!man文档如此写着
"grep searches the named input FILEs (or standard input if no files are named,
or if a single hyphen-minus (-) is given as file name) for lines containing a match to the given PATTERN. "原来,如果grep后面没有添加文件,它就把查找标准输入的内容。此时管道重定向了标准输入,所以,它把find的结果当作一个文件来查找,并没有进入find的结果的内部。后来,我把结果改成了
find -name "*.*" |do grep "CHAR_MESS" $done
麟则把他改成了
find -name "*.*" -exec find {} \;
两者都能得到结果,但是,结果稍微有些意外。这属于其他内容的问题,上述问题已经解决关于结果(grep查询结果现实规则)
我们得到的结果是
./.makefile.swp binary file matches
#define CHAR_MESS
这句话让我们误解,以为是#define CHAR_MESS是存放在.makefile.swp中。后来,终于发现,原来,由于.makefile.swp是二进制文件,虽然cat能查看,grep也能进入查看,但是,对于二进制文件,grep只提示在这个文件里边找到了,不提示也无法提示在哪一行。而对于文本文件,由于只有一个匹配,grep默认只有一个匹配是不显示文件的名字,所以它只现实#defind CHAR_MESS。这样对于不了解的人而言很容易误解,所以,可以添加-H参数,让它现实文件名。或者用-l让它现实文件列表。
grep命令(常用:与管道搭配,筛选出带某个关键词的输出)
转自:http://blog.csdn.net/k/article/details/8625148
grep和管道符
linux下管道符的应用
管道命令及grep命令
管道命令:连接多个linux命令符号:|命令1 | 命令2 将命令1连接到命令2 上grep命令:字符串搜索格式:grep 需要搜索的字符串 搜索的文件参数:-i 忽略大小写查找数据
返回关键字所在...
1.find :在指定目录下查找文件
注意:任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和...
8.6 管道符和作业控制
管道符“|” 把前面命令的结果给后面的命令用。cat server.log | grep &aaa&;
ls | wc -lctrl+z
#暂停任务,丢到后台运行,可以暂...
1、管道命令符管道命令符“|”的作用是将前一个命令的标准输出当作后后一个命令的标准输入,格式为“命令A|命令B”。
举个例子:
我们学过一个grep查找命令,这个命令可以在一个文件中通过匹配某...
管道符,可以把两条命令连起来,具体来说有两种应用,如下:
1. 例如: ps aux | grep &media&
在 ps aux中的結果中查找media。
find . -na...
管道符的意思是: 命令1 的正确输出作为命令2的输出对象.
没有更多推荐了,linux 使用grep 匹配多个条件的问题_百度知道
linux 使用grep 匹配多个条件的问题
例如:有个文本test.txt里有如下内容xyzabcdef.......abc........def...我现在想输出既有abc又有def的行,或者有xyz的行,该怎么写...
例如:有个文本test.txt里有如下内容xyzabcdef.......
abc ........
def ...我现在想输出既有abc又有def的行,或者有xyz的行,该怎么写
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:164
获赞数:463
grep -E &abc.*def|xyz& test.txt
采纳数:91
获赞数:304
grep '.*abc.*def.*\|.*xyz.*' test参考Grep的正则字符,及匹配规则你就都能弄出来了。
谢谢啦,不过上面那位写的简洁点
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。苹果/安卓/wp
积分 63, 距离下一级还需 22 积分
道具: 涂鸦板, 彩虹炫, 雷达卡, 热点灯, 显身卡, 匿名卡, 金钱卡下一级可获得
权限: 自定义头衔
购买后可立即获得
权限: 隐身
道具: 金钱卡, 变色卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
难过签到天数: 9 天连续签到: 2 天[LV.3]偶尔看看II
在做一个数据,类似于下图,只是数据量巨大
PatiNo ID SEX Age BiopsyYear Diagnosis 1
DN ... ......... ... ...
现在想要提取所有“Diagnosis”包含“DN”的病例,本来用的是
DN&-grep(&DN&,as.character(predata$Diagnosis))复制代码以前用一直都好的,不过后来调整了原文件,现在输入这个就显示
Warning messages:
1: In grep(&DN&, as.character(predata$Diagnosis)) :
&&输入的字符串117不适用于此语言环境
2: In grep(&DN&, as.character(predata$Diagnosis)) :
&&输入的字符串2667不适用于此语言环境
3: In grep(&DN&, as.character(predata$Diagnosis)) :
&&输入的字符串2984不适用于此语言环境
4: In grep(&DN&, as.character(predata$Diagnosis)) :
&&输入的字符串17745不适用于此语言环境
不知道是哪里出了问题,请大神指教!!
DN &- grep('DN', predata$Diagnosis)
neuroexplorer 发表于
DN好奇怪!用了还是不行,显示:
& ll&-grep(&DN&,predata$Diagnosis)
Warning messages:
1: In grep(&DN&, predata$Diagnosis) : 输入的字符串117不适用于此语言环境
2: In grep(&DN&, predata$Diagnosis) : 输入的字符串2667不适用于此语言环境
3: In grep(&DN&, predata$Diagnosis) : 输入的字符串2984不适用于此语言环境
4: In grep(&DN&, predata$Diagnosis) : 输入的字符串17745不适用于此语言环境
前段时间明明刚刚用过,不知道是哪里属性变了所以不行
石一乐文娴 发表于
好奇怪!用了还是不行,显示:
& llsuppose the source code file is code.R
source(&code.R&,encoding=&utf-8& )
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师在调用os模块时,调试信息为grep写入错误在查找资料得知,先使用grep 再使用 head的话,head 读到n条时,会关闭管道。但是grep 到的信息还是会继续往里面写。解决的方法有:1.忽略错误信息,把错误信息重定向到/dev/null2.grep 有个参数 -m 可以指定匹配的最大数
python 调用grep
#因为我现在还有找到在大量文件查找python实现的好方法。
#实现采用了grep的方法。
#使用了os.popen而不是subprocess中的Popen,因为前者的参数更简单
#不知subp...
shell 判断grep的结果是否含有特定字符串方法
利用grep执行的命令结束代码$?的值来判断是否已经grep到特定的值。
当$?等于0时,表示已经找到。
当$?不等于1时,表示没有找到。
当$?大于1时,表示命令执行错误,可能是参数错误什么的...
grep 返回值问题
grep 返回值问题
1、取grep命令的返回值(进程的返回值)
其中grep返回 0 1 或者 -1
即取1 0 或者-1放入一个变量中
var=`apache2 -v | grep...
Python下调用Linux的Shell命令
有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法:
1. os 模块...
#传参调用exe程序(解决相对路径,觉得路径问题),等待exe进程结束,此程序才结束。
# -*- coding: utf-8-*-
import os, os.path, sys
import ...
通过终端远程操作服务器时,难免要使特定进程处于持续运行状态,例如深度学习训练网络参数,但又不可能长时间不间断操作终端,我们希望将进程保持后台持续运行,这里提供两个思路:(1)docker 内运行,退出...
本文转载自Python中执行系统命令常见的几种方法。1 os.system# 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息
# 结果直接打印出来
cmdline = 'ifconfig eth0 | grep &inet addr& | cut -d: -f2 | cut -d& & -f1'
var = os.popen(cmdli...
要求:使用python脚本,开启一个子进程并实时读取并解析其打印(printf())的字符串。
首先用linux shell脚本来做试验,
写一个echo-test.sh,循环输出,内容如下:
没有更多推荐了,新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
稍有积蓄, 积分 382, 距离下一级还需 118 积分
论坛徽章:0
10可用积分
在用grep命令搜索文件内容时,遇到一个问题,即:当该文件内容一行过长时,grep搜索出的结果未能完全显示出所搜索出那一行的内容,而是截取了前面一部分显示。现在问题是,如何才能完全显示出来?
举例如下:某个文件为file1.unl,以下为其内容:
如果此时我用:
#grep &22222& file1.unl
显示结果为:
如何才能完整显示该行?
论坛徽章:0
关于Linux Grep命令使用的详细介绍
发布时间: 03:21& &&&来源:赛迪网技术社区& & 作者:korn
1. 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的功能。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
2. grep正则表达式元字符集(基本集)
锚定行的开始 如:'^grep'匹配所有以grep开头的行。
锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
标记匹配字符,如'\(love\)',love被标记为1。
锚定单词的开始,如:'\
锚定单词的结束,如'grep\&'匹配包含以grep结尾的单词的行。
重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
单词锁定符,如: '\bgrepb\'只匹配grep。
3. 用于egrep和 grep -E的元字符扩展集
匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。
匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。
匹配a或b或c。如:grep|sed匹配grep或sed
分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。
x{m},x{m,},x{m,n}
作用同x\{m\},x\{m,\},x\{m,n\}
4. POSIX字符类
为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
文字数字字符
非空字符(非空格、控制字符)
非空字符(包括空格)
所有空白字符(新行,空格,制表符)
十六进制数字(0-9,a-f,A-F)
5. Grep命令选项
同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。
-b,--byte-offset
打印匹配行前面打印该行所在的块号码。
-c,--count
只打印匹配的行数,不显示匹配的内容。
-f File,--file=File
从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h,--no-filename
当搜索多个文件时,不显示匹配文件名前缀。
-i,--ignore-case
忽略大小写差别。
-q,--quiet
取消显示,只返回退出状态。0则表示找到了匹配的行。
-l,--files-with-matches
打印匹配模板的文件清单。
-L,--files-without-match
打印不匹配模板的文件清单。
-n,--line-number
在匹配的行前面打印行号。
-s,--silent
不显示关于不存在或者无法读取文件的错误信息。
-v,--revert-match
反检索,只显示不匹配的行。
-w,--word-regexp
如果被\&和\&引用,就把表达式做为一个单词搜索。
-V,--version
显示软件版本信息。
要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。
$ ls -l | grep '^a'
通过管道过滤ls -l输出的内容,只显示以a开头的行。
$ grep 'test' d*
显示所有以d开头的文件中包含test的行。
$ grep 'test' aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]\{5\}' aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep 'w\(es\)t.*\1' aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用&\&号进行转义,直接写成'w(es)t.*\1'就可以了。(T002)
小富即安, 积分 2604, 距离下一级还需 2396 积分
论坛徽章:1
回复 #1 loverVC 的帖子
楼主你确定?
巨富豪门, 积分 38234, 距离下一级还需 1766 积分
论坛徽章:23
回复 #1 loverVC 的帖子
这是终端设置的问题,而不是grep的问题。
稍有积蓄, 积分 382, 距离下一级还需 118 积分
论坛徽章:0
确定什么,我遇到的情况就是问题的描述那样。。
稍有积蓄, 积分 382, 距离下一级还需 118 积分
论坛徽章:0
终端没设置的问题??那我到控制台上面去试试。。。
小富即安, 积分 2007, 距离下一级还需 2993 积分
论坛徽章:0
你可以把结果输出到一个文件里看一下对不对
grep &22222& file1.unl &fiel2.unl2
稍有积蓄, 积分 382, 距离下一级还需 118 积分
论坛徽章:0
呵呵,LS,,这个肯定试过的。到控制台上也不行。。telnet上去也不行。结果都一样。。
白手起家, 积分 61, 距离下一级还需 139 积分
论坛徽章:0
回复 #1 loverVC 的帖子
按照你说的方法进行尝试
bian@vobile:~/login$ cat 1
debian@vobile:~/login$ grep &22222& 1
bian@vobile:~/login$
没有出现你说的问题。
巨富豪门, 积分 38234, 距离下一级还需 1766 积分
论坛徽章:23
cat -A file1.unl
看看是否有特殊字符。
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处}

我要回帖

更多关于 grep命令查找文件内容 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信