linux在文件夹下查找关键字,linux 查询目录下包含关键字的所有文件
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
查找目录下的所有文件中是否含有某个字符串
find .|xargs grep -ri "IBM"
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
find .|xargs grep -ri "IBM" -l
linux 查找某目录下包含关键字内容的文件grep -r "{关键字}" {路径}
例如:
grep -r "test" /data/reports
对find,xargs,grep和管道的一些深入理解
相信大家都知道在目录中搜索含有固定字符串文件的命令:find . -name '*.py' |xargs grep test
刚开始的时候,我不熟悉xargs命令,所以直接使用的命令是find . -name '*.py' |grep test
结果并不是自己所期望的。此命令只是找出文件名*.txt有test的情况。
这里我就研究一下,究竟xargs做了什么,使得结果不相同。
参数与标准输入
这两个词我们在Linux命令中是很常见的。但是参数和标准输入其实是有区别的。我们日常使用的很多命令,例如ls -lah .中。l, a, h ,都是命令ls的参数。至于标准输入,可以说它某种流数据。而通常来讲标准输入的流数据来源就是我们的终端输入。在Linux命令中,有些命令可以接收标准输入,有些是不能的。像上面的ls,就是只能接收参数,不能接收标准输入。像cat命令或echo命令,这些是可以的。
怎么分辨一个命令可不可以接收标准输入?很简单,当你敲完命令回车后,终端会等待接收你的输入,例如当你在终端输入cat后,终端会等待你输入字符,当你输入一些字符后,然后按Ctrl-C发送终止符号。这时cat命令接收标准输入完毕,执行命令,也就是将刚才键入的内容输出的标准输出上(屏幕)。
管道
管道的作用是将前面命令的标准输出作为后面命令的标准输入。这里要注意,后面的命令接收的是标准输入,所以如果命令不支持接收标准输入,那么就不能直接使用管道,例如常用的ls命令,只能使用参数,而不能使用标准输入,所以[command] | ls是不能使用的。而命令如echo或cat就可以。那么肯定有方法来实现这些不能使用标准输入的命令与管道结合,这时候xargs便出场了。
xargs命令
xargs命令通俗来讲就是将标准输入转成各种格式化的参数,所以命令[command 1] | xargs [command 2]就是将command 1的标准输出结果,通过管道|变成xargs的标准输入,然后xargs再将此标准输入变成参数,传给[command 2]。这样一来,通过xargs命令,我们便可以在管道后面使用那些不接收标准输入的命令了。例如[command 1]|xargs ls,是不是很熟悉?
find与grep
我们首先来查看grep手册。通过man grep命令。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. By default, grep prints the matching lines
那么对于第一个命令find . -name '*.py' |grep test,是将前面命令的标准输出作为标准输入传给了grep test,那么grep是从这些标准输入寻找test字符,也就是文件名组成的字符流, 最终选择出的是这些文件名。
对于第二个命令find . -name '*.py' |xargs grep test,通过xargs,find得到的文件名成为了参数传给后面的grep,那么这时候这些文件名就是实实在在的文件标识,grep接收后会按正常的使用方式在各文件中搜寻字符串。
参考:https://www.baidu.com/link?url=ViL8A5oAhPKpqoK14dedk0pJuvXoH8ok2eHf6-cZJmRaTMYqLuzjR3eS14oCLtothy1RnbqLwtBnz4aTAfB17q&wd=&eqid=fa94666f0002d501000000035b6ce3d0
grep 参数-a 不要忽略二进制数据。
-A 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-c 计算符合范本样式的列数。
-C或- 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e 指定字符串作为查找文件内容的范本样式。
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F 将范本样式视为固定字符串的列表。
-G 将范本样式视为普通的表示法来使用。
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i 忽略字符大小写的差别。
-l 列出文件内容符合指定的范本样式的文件名称。
-L 列出文件内容不符合指定的范本样式的文件名称。
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-q 不显示任何信息。
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-s 不显示错误信息。
-v 反转查找。
-w 只显示全字符合的列。
-x 只显示全列符合的列。
-y 此参数效果跟“-i”相同。
-o 只输出文件中匹配到的部分。
查找并替换
sed
grep -rl matchstring somedir/ | xargs sed -i 's/string1/string2/g' 例如: grep -rl 'windows' ./path | xargs sed -i 's/windows/linux/g'
linux在文件夹下查找关键字,linux 查询目录下包含关键字的所有文件相关推荐
- java批量提取文件夹名称_bat 批量提取指定目录下的文件名
bat 批量提取指定目录下的文件名 下面是批量获取指定目录下的文件名的核心代码 @echo off echo text input set input= set /p input=: echo %in ...
- linux 解压zip 空格,如何在linux系统下对文件夹名有空格的文件夹进行操作,linux空格...
如何在linux系统下对文件夹名有空格的文件夹进行操作,linux空格 在Windows操作系统中可以轻易地创建\移动\删除文件夹名带有空格的文件夹, 而在linux则需要进行一些特殊的处理才能实现以 ...
- linux rz 上传文件夹_第二章Linux服务器环境搭建之Tomcat安装
一.下载tomcat安装包 官网下载地址: http://tomcat.apache.org/download-80.cgi 我下载的版本是tomcat 9,具体下载那个版本需要根据自己的需要进行选择 ...
- linux文件夹加密访问,技术|Linux系统上用encfs创建和管理加密文件夹
如果你想使你计算机上的某些信息免于被窥视的话,可以看看这篇文字.保护信息的一种方法就是加密你的home目录,但是一旦你登录系统后,你的home目录下的信息将暴露于外.过去,我已经写过关于怎样在你的系统 ...
- linux赋予文件夹所有权限_linux – 如何将某些用户权限仅授予子文件夹
我在我的服务器上拥有root权限,并且我想为特定组和用户授予权限.有一种情况,有目录树: dir1 ├── subdir1 ├── subdir2 ├── subdir3 我有三个用户(user1,u ...
- linux键盘设置的文件在哪个文件夹,「正点原子Linux连载」第十五章按键输入试验...
原标题:「正点原子Linux连载」第十五章按键输入试验 第十五章按键输入试验 前面几章试验都是讲解如何使用I.MX6U的GPIO输出控制功能,I.MX6U的IO不仅能作为输出,而且也可以作为输入.I. ...
- linux修改文件夹的访问权限,linux setfacl chmod g+s 修改文件夹和文件的默认访问权限和所属组...
linux setfacl chmod g+s 修改文件夹和文件的默认访问权限和所属组 我们在创建一个文件夹或者一个文件的时候,希望集成父文件夹的访问权限和组 修改默认访问权限 setfacl 以及 ...
- linux mysql 文件夹权限_找到linux文件夹
FineReport关于Linux下字体乱码终极解决方案 1:在windows下找到系统使用到的字体,这里以楷体举例 •到c盘的windows文件夹的Fonts文件夹里面存放了windows中用到的所 ...
- 在linux上备份文件夹在哪里找,Linux 备份 文件夹的权限 然后在其他机器进行恢复...
Study From https://www.cnblogs.com/chenshoubiao/p/4780987.html 用到的命令 getfacl 和 setfacl 备份 getfacl -R ...
- linux同步某台服务器,linux 两台服务器之间开机自动同步指定目录下的文件
linux 两台服务器之间开机自动同步指定目录下的文件 服务器B(172.17.166.11)上开机或者重启会自动拉取服务器A(172.17.166.10)上指定目录下所有文件 1.创建服务器B到服务 ...
最新文章
- 前端开发之JavaScript基础篇一
- R语言使用ggplot2包和ggQC包可视化帕累托图(Pareto chart)
- java采集温湿度水浸_机房水浸传感器:智能生活不可或缺的漏水传感器
- 用户 'IIS APPPOOL\***' 登录失败(转载)
- 第四期《Summer Tree》 已经整理完毕
- 使用html() undefined_SweetAlert2使用教程
- No New-Net
- Microsoft Visual Studio Team Foundation Server Express 2013 (一) 服务器端安装和配置
- MySQL学习(二、简单查询和多行、单行函数)
- Python 源代码代码打包成 whl 文件
- C语言扑克牌洗牌发牌代码
- 建立stm32工程模板及Keil设置(二)
- Docker 与 K8S学习笔记(二十)—— 使用Downward API向容器注入Pod信息
- linux命令详解--pmap
- QTP10破解方法及mgn-mqt82.exe下载
- R语言 提取数据中的任意子集
- python单用户登录_Python 实现用户登录的简单方法
- 一款方便好用的免费截图神器
- oracle dump 文件解析,Oracle 常用的dump(Memory Dumps/File Dumps/Trace 文件使用示例)
- C--if else嵌套几种形式总结--不要忘记括号了,养成只要if大括号的习惯