Linux查找命令四剑客awk、sed、find(locate)、grep讲解

2023-05-16

目录

find命令:

一旦执行了chmod 000 *  那么如何恢复权限呢?

2. grep (找文件内容,行操作)

3. awk

 4. sed 找文件内容,行操作


find命令:

1. find (找文件)  根据 文件名 和 路径 查找文件 并执行 一些操作
find  路径  -name "文件名"

find /home/python/Desktop/ -name "1.txt"
find /home/python/Desktop/ -name "*.txt"
find /home/python/Desktop/ -name "*.txt" -type f        #f ==> file, 找到的是 文件 类型
find /home/python/Desktop/ -name "*.txt" -type d        #d ==> dir, 找到的是 文件夹 类型

find /home/python/Desktop/ -name "*.txt" -type d -ctime -1
(ctime ==> changetime,-1 ==> 1天以内,+30 ==> 超过30天)

find /home/python/Desktop/ -name "*.txt" -type f -ctime -1 |xargs rm -rf {} \;
(xargs ==> 把前面的输出当做输入传给后面{}花括号, \; ==> 与find固定搭配

find /home/python/Desktop/ -name "*.txt" -type d -ctime -1 -exec cp -r {} ~/Desktop/test/ \;

find /home/python/Desktop/test -type d -exec chmod -R 755 {} \;
-exec ==> 执行某些操作)

find /home/python/Desktop/ -name "*.txt" -type f -ctime +30 -size +1k
(-size ==> 文件大小, +1k ==> 大于1k且k为小写,+1M ==> 大于1M且M为大写)

find . -iname "ab*" -type f -mtime -3 -size -1M -perm 755
  •    .          表示在当前目录下
  • -name     查找关键字
  • -iname    忽略大小写查找含有关键字的文件
  • -type      d目录  f文件   l  软链接  
  • "ab*"      *匹配一串字符  ?匹配一个字符
  • -size      +1M 表示大于1M的-1k  表示小于1k的文件
  • -perm  755  表示权限为755的文件
  • -mtime -3    modify time 修改时间在3天以内的。
find -name 'a.*' -o -name '12.*'
find -name 'a.*' -a -type f
  • -o 表示 or 或
  • -a 表示 and
find . -name "*.txt" -type f -mtime -1 -size +5M -perm 644
find . -name "*.txt" |xargs rm -rf {} \;
find . -name "*.txt" -exec  rm -rf {} \;
  • |xargs  表示将前面命令获得的结果作为一个整体,放到后面的{}中去,结尾加上\;
  • -exec 将前面的结果作为后面的输入。
  • |xargs 可换成-exec ,-exec 可支持的操作范围更广(如:cp mv chmod chown)
  • |xargs 只支持 rm删除操作
  • 以后使用前面的命令结果,推荐只使用-exec 
  • ls -li   # 可以查看文件的id号

一旦执行了chmod 000 *  那么如何恢复权限呢?

find . -type f -exec chmod -R 644 {} \; #将当前目录下的所有文件的权限修改成664
find . -type d -exec chmod -R 755 {} \; #将当前目录下的所有目录的权限修改成755

 把当前目录下以.txt结尾,并且修改时间在1天以内,文件大小大于5M的文件 移动到/root/目录去 

find . -name "*.txt" -type f -mtime -1 -size +5M -exec mv {} /root/ \;

 把当前目录下以.txt结尾,并且修改时间在1天以内,文件大小大于5M的文件 复制到/root/目录去 

find . -name "*.txt" -type f -mtime -1 -size +5M -exec cp -r {} /root/ \;

删除当前目录下修改时间在30天以前的*.log文件

find . -type f -name "*.log" -mtime +30 -exec rm -rf {} \;

2. grep (找文件内容,行操作)

根据 字符串 查找文件内容 并执行 一些操作

grep -n --color '^hello' ~/Desktop/2.txt

-n          ==> 显示行数

 -color    ==> 显示颜色

 '^hello'    ^ ==>字符串开头,查找的字符串
 $              ==> 字符串结尾

 ~/Desktop/2.txt ==> 查找的文件路径

grep -v --color '^hello' ~/Desktop/2.txt | grep -v "^$"

-v             ==> 取反,不要以 hello 开头的内容

 -v ”^$”   ==> 去掉空行

egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' 2.txt 
egrep '([0-9]{1,3}\.){3}[0-9]{1,3}$' 2.txt 

'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'  ==> 正则表达式匹配ip地址 xxx.xxx.xxx.xxx

cat /etc/passwd

grep 命令用于查找文件中的内容,匹配文件中的内容
grep  -n --color "root" /etc/passwd

-n    ==>查找的结果在passwd文件的 行号
--color  ==>为关键字加上颜色
/etc/passwd  这个文件
grep  -n --color "^root" /etc/passwd

^root 表示以root开头的行,文本后面出现root关键字没有用

grep  -n --color "root$" /etc/passwd
grep  -n --color "bash$" /etc/passwd

root$ 表示文本所在行以root结尾
bash$ 表示文本所在行以bash结尾

grep "#" /etc/passwd  #查找passwd文件中包含#的行
grep -v "#" /etc/passwd  #查找passwd文件中不包含#的行

grep -v "#" /etc/passwd | grep -v "^$"   #查找passwd文件中不包含#的行,并去除空行

grep -v "^$"   表示不包含空行,即去除空行

  • -v  表示不包含
  • "^$" 表示空行
  • ^ 以空格开头
  • $ 以空格结尾


grep -[a c i n v] '搜索的内容'  filename

  • -a 以文本文件方式搜索

  • -c 计算找到的符合行的次数

  • -i 忽略大小写

  • -n 顺便输出行号

  • -v 反向选择,即显示不包含匹配文本的所有行

  • -h 查询多文件时不显示文件名

  • -l查询多文件时只输出包含匹配字符的文件名

  • -s 不显示不存在或无匹配的错误信息

  • grep 命令加 -E 参数,这一扩展允许使用扩展模式匹配

  • grep -E  =  egrep


使用grep查找文件中的ip地址

grep --color "[0-9][0-9]"  test.txt   
"[0-9]"  表示0~9任意一个字符
"[0-9][0-9]" 两个连续数字
grep --color "[0-9]\{1,3}"  test.txt  #匹配1~3次

egrep --color "[0-9]\{1,3}\.[0-9]\{1,3}\.[0-9]\{1,3}\.[0-9]\{1,3}$"  test.txt 

[0-9]\{1,3}\. 表示以1~3位数字,并且后面有一个 .
\.   表示转义的.  一定要加上
[0-9]\{1,3}$   表示以1~3位数字结尾,如果是4位数字或以上就不行
[a-z] 表示一个字母


egrep --color "([0-9]\{1,3}\.){3}[0-9]\{1,3}$"  test.txt 
{} 表示匹配的的次数
([0-9]\{1,3}\.){3} 将前面的形式匹配3次

[^] 匹配一个不在指定范围内的字符 ex: '[^A-FH-Z]rep' 匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

ls -l |grep '^a'通过管道过滤ls -l 输出的内容,只显示以a开头的行
grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test行
grep '[a-z]/{5/}'  aa显示所有包含每个字符串至少有5个连续小写字符的字符串的行

grep -c "48" test.txt 统计所有以"48"字符开头的行有多少
grep -i "May" test.txt 不区分大小写查找 "May"所有的行

grep -n "May" test.txt 显示行号
grep -v "48" test.txt 显示输出没有字符"48" 所有的行
([a-z]+[a-z0-9])      表示匹配任意一个字母 + 任意一个数字或字母
([a-z]+[a-z0-9]+)    这边的+号表示可以匹配多个

 

3. awk

找文件内容,列操作 根据文件内容 做分割 添加字符串
awk '{print $2}' 2.txt
('{print $2}' ==> 打印第2列,2.txt ==> 文件名)
awk '{print $NF}' 2.txt
('{print $NF}' ==> 打印倒数第1列, NF指的是某行被分为NF列)
awk '{print $(NF-1)}' 2.txt
( '{print $(NF-1)}'  ==> 打印倒数第2列且(NF-1)不能为负数)
awk -F: '{print $1}' 2.txt  | head -5
(-F: ==> 以:分割         | head -5 ==> 取前5行)
awk -F: '{print $1":"$NF}' 2.txt
(":" ==> 添加冒号,双引号代表添加。" "==>"",双引号里面可以添加任何东西)
ifconfig | grep 'inet 地址' | grep -v '127.0.0.1' | awk '{print $2}' | awk -F: '{print $2}'|
awk -F. '{print $1"-"$2"-"$3"-"$NF}'
(匹配ip地址,输出xxx-xxx-xxx-xxx)

awk 可以打印某一行或者某一列(列是以空格分隔的)
awk '{print $1}' test.txt      打印文件第一列

awk '{print $3}' test.txt      打印文件第3列
awk '{print $NF}' test.txt      打印文件倒数第1个域   NF 表示最后一个

awk '{print $(NF-1)}' test.txt      打印文件倒数第2个域

awk -F: '{print $1,$NF}'  /etc/passwd|head 5  

 打印前5行的第一列和最后一列

-F:  格式匹配,这样就可以不显示文本行中的 : 冒号了

awk -F: '{print $1":"$NF}'  /etc/passwd|head 5  

在第一列与最后一列之间添加一个:冒号

awk -F: '{print $1" secret "$NF}'  /etc/passwd|head 5  

在第一列与最后一列之间 多加一列  secret 
-F: 表示以:符号做分隔
192.168.1.68 将其转换成  192-168-1-68
ifconfig|grep "inet addr"|grep 192 |awk '{print $2}'

ifconfig|grep "inet addr"|grep -v "172.0.0.1|awk '{print $2}'|awk -F"addr:" '{print $2}'|awk -F. '{print $1"-"$2"-"$3"-"$4}'

修改主机的名称,可以通过下面的命令 

 

 

 4. sed 找文件内容,行操作

sed 's/h/he/2' 2.txt
s ==> 替换

h ==> 原内容

he ==> 新内容

2  ==> 替换第2个

2.txt ==> 文件名

sed 's/h/he/g' 2.txt
(g ==> 替换全部)
sed 's/h/www.\/\/baidu.com/3' 2.txt
(\/\/ ==> //不进行转义)
sed 's#h#www.//baidu.com#3' 2.txt
(# ==> 代替/,不用\标明不进行转义)
sed -i 's#h#he#3' 2.txt
(-i ==> 改变文件。没有的话,不改变文件)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux查找命令四剑客awk、sed、find(locate)、grep讲解 的相关文章

  • jQuery - 找不到函数?

    有人可以解释一下为什么下面的代码会抛出错误吗 JavaScript Document document ready function port box css display none ul portfolio li a bind clic
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 如何阻止ubuntu在使用apt安装或更新软件包时弹出“Daemons using outdatedlibraries”? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我最近新安装了 Ubuntu 22 04 LTS 我发现每次使用 apt 安装或更新软件包时 它都会询问我有关Which servic
  • 从 ttyUSB0 写入和读取,无法得到响应

    我对 Linux tty 不太有经验 我的环境是带有丰富 USB 串行的 Raspbian 什么有效 stty F dev ttyUSB0 38400 cu l dev ttyUSB0 s 38400 cu to dev ttyUSB0作品
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的

随机推荐

  • 二叉树DFS/BFS实现(C++)

    深度优先搜索算法 xff08 Depth First Search xff09 DFS是搜索算法的一种 它沿着树的深度遍历树的节点 xff0c 尽可能深的搜索树的分支 当节点v的所有边都己被探寻过 xff0c 搜索将回溯到发现节点v的那条边
  • 当TCP建立连接过程中出现问题了,如何检查?

    netstat命令 stat状态说明 TCP协议规定 xff0c 对于已经建立的连接 xff0c 网络双方要进行四次握手才能成功断开连接 xff0c 如果缺少了其中某个步骤 xff0c 将会使连接处于假死状态 xff0c 连接本身占用的资源
  • 本地服务器上传代码到gitee仓库

    把gitlab仓库里的node day01项目传到本地服务器 再把本地服务器里的node day01项目传到Gitee代码仓库 1 登录Gitlab xff0c 复制代码仓库地址 2 拷贝一刚复制的Git 仓库到本地 root 64 ubu
  • 牛客网刷刷刷刷

    作者 xff1a 故事的小黄瓜 链接 xff1a https www nowcoder com discuss 436386 来源 xff1a 牛客网 1 xff0e 线程池如何开启一个新线程 xff1f 2 xff0e 线程池初始化的步骤
  • c++ 后端linux开发常见问题

    计算机操作系统 xff08 Linux xff09 命令 xff1a netstat tcpdump ipcs ipcrm 这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验 cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟
  • STL c++ 使用小结

    各位看官 xff0c 欢迎来到趁热搬砖小码农的博客 在写C 43 43 程序的时候会发现STL是一个不错的东西 xff0c 减少了代码量 xff0c 使代码的复用率大大提高 xff0c 减轻了程序猿的负担 还有一个就是容器 xff0c 你会
  • Oracle面试题,带答案!

    1 你要对操纵Oracle数据库中的数据 下列哪个选项表示Oracle中select语句的功能 xff0c 并且不需要使用子查询 xff08 C xff09 A xff0e 可以用select语句改变Oracle中的数据 B xff0e 可
  • 什么是进程?什么是线程?总结

    1 什么是进程 xff1f 什么是线程 xff1f 进程是表示资源分配的基本单位 xff0c 又是调度运行的基本单位 例如 xff0c 用户运行自己的程序 xff0c 系统就创建一个进程 xff0c 并为它分配资源 xff0c 包括各种表格
  • C++知识点小结(趁热搬砖三年半的小码农) 2020年07月2日整理

    c 43 43 最好用易用的新特性 xff1a auto decltype https blog csdn net zyc2018 article details 93591189nullptr range forusing c 43 43
  • 如何定位内存泄漏问题

    如何定位内存泄漏问题 Things You 39 ll Need Proficiency in C 43 43 C 43 43 compilerDebugger and other investigative software tools
  • C++之future和promise

    C 43 43 之future和promise future和promise的作用是在不同线程之间传递数据 使用指针也可以完成数据的传递 xff0c 但是指针非常危险 xff0c 因为互斥量不能阻止指针的访问 xff1b 而且指针的方式传递
  • linux常用小知识点

    答案linux考试题 1 在登录Linux时 xff0c 一个具有唯一进程ID号的shell将被调用 xff0c 这个ID是什么 b A NID B PID C UID C CID 答 xff1a w命令查看用户tty终端信息 ps ef
  • 无锁编程基础

    背景 我们处在技术快速发展的时代 xff0c 竞争变得前所未有的激烈 xff0c 不仅要十八般武艺俱全 xff0c 还得选对正确的技术 xff0c 跟上发展的脚步 xff0c 并贴上精研某个专业方向的标签 我们不仅要面对多线程和并发 xff
  • Linux网络相关概念和修改IP地址的方法

    网卡的命名规则 ifconfig xff1a 用于显示或设置网络设备 ens32 span class token punctuation span flags span class token operator 61 span span
  • 二维坦克大战游戏代码开发

    这是我实际面试中 xff0c 遇到的一个题目 xff0c 编写一个坦克大战游戏 一开始感觉懵 xff0c 后来代码写写就好了 include lt iostream gt include lt stdlib h gt include lt
  • 软件系统性能常识

    不管是系统设计人员 开发人员还是测试人员 xff0c 要构建高性能的系统 xff0c 对于系统性能的一些常用术语都不了解 xff0c 那是无从做起的 xff0c 这里主要介绍几个软件性能指标的术语及计算方法 xff0c 便以在性能优化及性能
  • Socket的三种轮询方式select、poll、epoll之间的区别

    select poll epoll之间的区别 搜狗面试 1 select 61 61 gt 时间复杂度O n 它仅仅知道了 xff0c 有I O事件发生了 xff0c 却并不知道是哪那几个流 xff08 可能有一个 xff0c 多个 xff
  • linux后端c++开发人员需要学习的技术栈

    数据结构和算法 学完之后要刷leetcode xff08 剑指offer xff09 计算机网络 tcp ip 协议栈 xff08 tcp ip详解 xff09 操作系统 进程和线程 并发 和锁 内存分布调度等等 xff08 深入理解操作系
  • 内核态和用户态的区别

    内核态和用户态的区别 当一个任务 进程 执行系统调用而陷入内核代码中执行时 xff0c 我们就称进程处于内核状态 此时处理器处于特权级 最高的 0级 内核代码 当进程处于内核态时 xff0c 执行的内核代码会使用当前的内核栈 每个进程都有自
  • Linux查找命令四剑客awk、sed、find(locate)、grep讲解

    目录 find命令 xff1a 一旦执行了chmod 000 那么如何恢复权限呢 xff1f 2 grep xff08 找文件内容 行操作 xff09 3 awk 4 sed 找文件内容 行操作 find命令 xff1a 1 find xf