有时候想在代码中执行某个关键词,会用下面的语句:

find . -type f -name "*.java" | xargs grep -n "<keyword>"

大部分情况下良好,但也有出问题的时候,比如某个目录中含有空格。那么检索这个目录下所有的文件都会报错。为此,需要改一下脚本,将路径放到引号中。

find . -type f -name "*.java" | xargs -I {} grep -n "<keyword>" "{}"

这样又出现了新的问题:结果中都没有命中文件的文件名了。只有行号和命中行的内容。像下面这样:

:123   public class xxxxxx...

没错,我用的是 cygwin. 上面的命令在 linux 下是没有问题的。但在 cygwin 下不行。即使在find中加上 -print 也无济于事。

不过,用另一个参数可以解决这个问题,即 print0,脚本如下:

find . -type f -name "*.java" -print0 | xargs -0 grep -n "<keyword>"

xargs -0 大意是让输入项以 \0 作为分隔,而不是以空白符号。-print0 和 -0 配合使用。带空格的路径再不会被当作多个输入项了。

接下来考虑完善这个命令,如果想同时检索以 .java, .xml, .jsp 等结束的文件。该怎么办叫做?

find . -type f -name "*.java" -print0 -o -name "*.xml" -print0 -o -name "*.jsp" -print0 | xargs -0 grep -n "<keyword>"

然后在 .bashrc 中给这个命令起个别名:

alias grepj='find . -type f -name "*.java" -print0 -o -name "*.xml" -print0 -o -name "*.jsp" -print0 | xargs -0 grep -n'

命名就简化成 grepj keyword,这样就完美了。

注意每一个检索条件后都要跟一个 -print0 参数。

解决grep的结果无法显示文件名的问题的更多相关文章

  1. Ubuntu下解决解压zip文件中文文件名乱码问题

    在Ubuntu下解压Windows下压缩的zip文件时,会出现解压出的带中文文件名的文件名乱码,这是因为Ubuntu和Windows默认的编码不同,Ubuntu下默认的编码是UTF-8,而Window ...

  2. 完美解决,浏览器下拉显示网址问题 | 完美解决,使用原生 scroll 写下拉刷新

    在 web 开发过程中我们经常遇到,不想让用户下拉看到我的地址,也有时候在 div 中没有惯性滚动,就此也出了 iScroll 这种关于滚动条的框架,但是就为了一个体验去使用一个框架好像又不值得,今天 ...

  3. 解决 PHPExcel 长数字串显示为科学计数

    解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...

  4. 解决dede搜索页面只能显示10条信息解决方案

    解决dede搜索页面只能显示10条信息解决方案,感觉显示的信息太少,这时就要想办法去解决一下.看看有什么好办法来解决一下这个问题. dede搜索页模板中,默认只能显示10条记录. 打开dede搜索页模 ...

  5. 解决每次打开office 2010显示正在配置的问题

    解决每次打开office 2010显示正在配置的问题 OFFICE 2010 MSDN版出来后,下载安装 ,启动后发现每次打开都会出现“正在配置”的进度,删除重装亦不成功,对SETUP.EXE改名也不 ...

  6. 解决django关于图片无法显示的问题

    http://python.usyiyi.cn/django/index.html http://m.blog.csdn.net/blog/qingyuanluofeng/44877399 http: ...

  7. 解决swfupload上传控件文件名中文乱码问题 三种方法 flash及最新版本11.8.800.168

    目前比较流行的是使用SWFUpload控件,这个控件的详细介绍可以参见官网http://demo.swfupload.org/v220/index.htm 在使用这个控件批量上传文件时发现中文文件名都 ...

  8. Html中DIV成为超级链接,解决在360浏览器+IE9显示小手图标的兼容性!

    Html中DIV成为超级链接,解决在360浏览器+IE9显示小手图标的兼容性! <div style="cursor:pointer;" onclick="sele ...

  9. 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录

    解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区  作者:njchenyi [字体:大 中 小]   我是先安装了Ubuntu 12.04 Server,然后 ...

随机推荐

  1. Xamarin Android真机测试报错

    Xamarin Android真机测试报错   Xamarin Android真机测试报错,错误信息为INSTALL_CANCELLED_BY_USER.出现这个错误,通常都是真机上开发者选项设置错误 ...

  2. ACM的奇计淫巧_bitset优化

    什么是bitset bitset 是STL库中的二进制容器,根据C++ reference 的说法,bitset可以看作bool数组,但优化了空间复杂度和时间复杂度,并且可以像整形一样按位与或. 使用 ...

  3. ZOJ 2589 Circles(平面图欧拉公式)

    [题目链接] http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2589 [题目大意] 给出一些圆,问这些圆可以把平面分为几个部 ...

  4. JDK源码学习笔记——LinkedHashMap

    HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序. LinkedHashMap保证了元素迭代的顺序.该迭代顺序可以是插入顺序或者是访问顺序.通过维护一个 ...

  5. SharpICTCLAS分词系统简介

    SharpICTCLAS分词系统简介(4)NShortPath-1http://www.cnblogs.com/zhenyulu/articles/669795.html SharpICTCLAS 1 ...

  6. TWinHttp之二

    TWinHttp之二 function EncodeParams(strings: TStrings): SockString;var i: Integer; S: string;begin for ...

  7. 【iOS开发】canOpenURL: failed for URL

    控制台输出 如图是在我启动一个 Xcode 7 + iOS 9 的 App 之后,控制台的输出. 这在 Xcode 6.4 + iOS 8 时,是不会有的情况,原因是[为了强制增强数据访问安全, iO ...

  8. Java9 modules (Jigsaw)模块化迁移

    要点 通过模块化的方式开发应用程序,实现更好的设计,如关注点分离和封装性. 通过Java平台模块化系统(JPMS),开发者可以定义他们的应用程序模块,决定其他模块如何调用他们的模块,以及他们的模块如何 ...

  9. IP编址

    IP地址 /include/linux/inetdevice.h,定义IPV4专用的网络设备相关的结构.宏等 /net/ipv4/devinet.c.支持IPV4特性的设备操作接口 数据组织 net_ ...

  10. arithmetic-slices

    https://leetcode.com/problems/arithmetic-slices/ public class Solution { public int numberOfArithmet ...