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讲解 的相关文章

  • 删除一行中逗号之前的所有内容

    我有多个文件 其中包含以下行 foo 123456 bar 654321 baz 098765 我想删除每行逗号之前 包括 的所有内容 输出将是 123456 654321 098765 在另一个问题上看到类似的内容后 我尝试使用以下内容
  • Linux 内核:Spinlock SMP:为​​什么 spin_lock_irq SMP 版本中有 preempt_disable()?

    Linux内核中的原始代码是 static inline void raw spin lock irq raw spinlock t lock local irq disable preempt disable spin acquire l
  • 无法在 Linux 中阻止从命名管道 (FIFO) 读取

    很奇怪 我似乎无法完成这项工作 这是我的架构 我有一个命名管道 它将在永远运行 root读取器进程和多个应用程序编写器进程 读者进程必须是blocking当作家们在nonblocking 因此 这就是我在阅读器进程中所做的 该进程将运行ro
  • IDLE 无法导入 Tkinter。您的 Python 可能未配置 Tk [重复]

    这个问题在这里已经有答案了 我运行的是 Ubuntu 10 10 今天安装了 Python 3 2 系统已经运行Python 2 6 我在终端中输入idle3 2 它给了我 IDLE 无法导入 Tkinter 您的 Python 可能未针对
  • 使用 sed 和 pstree 显示正在使用的终端类型

    我一直在尝试仅显示用作名称的终端类型 例如 如果我使用 konsole 它会显示 konsole 到目前为止我一直在使用这个命令 pstree A s 输出这个 systemd konsole bash pstree 我有以下内容可以从该行
  • Python:文本覆盖在所有窗口顶部,包括 Linux 中的全屏

    我正在尝试用 python 编写一个简单的脚本 在所有窗口和全屏应用程序之上输出文本 该脚本的目的是以类似于 Steam FPS 计数器工作方式的方式输出平均负载和可用内存 以及其他有用的统计数据 到目前为止 我尝试了 pygame 但据我
  • ELF 文件头

    关于 elf 文件头的一个简单问题 我似乎找不到任何关于如何在 elf 头中添加 更改字段的有用信息 我希望能够更改幻数并向标题添加构建日期 以及可能的其他一些内容 据我了解 链接器创建标头信息 但我在 LD 脚本中没有看到任何引用它的内容
  • 如何在 linux bash shell 中对字符串数组进行排序? [复制]

    这个问题在这里已经有答案了 例如 数组是 link2 pathname link1 pathname link3 pathname 我怎样才能得到像下面这样的数组 link1 pathname link2 pathname link3 pa
  • Ansible 权限问题

    我正在尝试将当前用户添加到系统中的某个组 然后执行需要该组权限的命令 我的剧本是这样的 name Add this user to RVM group sudo true user state present name vagrant ap
  • 我如何知道哪个 /dev/input/eventX (X=0..7) 有 Linux 输入流?

    我正在尝试捕获 Linux 键盘 鼠标输入 并且我正在读取类似的事件 dev input event2 但似乎输入有时会定向到 dev input event2 有时到 dev input event3 我想知道是否有一个地方可以找出哪个流
  • Python 套接字库认为套接字未打开时已打开

    我正在使用一些Python 如下所示 HOST 127 0 0 1 PORT 43434 single socket socket socket AF INET socket SOCK STREAM try single bind HOST
  • Bash 脚本问题

    我可以很好地运行这个命令 并得到我想要的输出 ifconfig eth0 grep HWaddr awk print 5 但是 当我将命令设置为变量并打印该变量时 出现错误 CASS INTERNAL ifconfig eth0 grep
  • 如何找到某个命令的目录?

    我知道 当您使用 shell 时 唯一可以使用的命令是可以在 PATH 上设置的某些目录中找到的命令 即使我不知道如何查看 PATH 变量上的目录 这是另一个可以回答的好问题 我想知道的是 我来到 shell 并写道 lshw 我想知道 s
  • 在 Kali (Debian) 中安装 mono-devel 时,软件包具有未满足的依赖关系

    我尝试安装 mono devel 并输入sudo apt get mono devel在终端中 但失败了 得到以下结果 apt get install mono devel Reading package lists Done Buildi
  • Linux 上的 Chrome - 查询浏览器以查看打开了哪些选项卡?

    我在 Ubuntu Linux 上运行 Chromium 开源 chrome 版本 我可以编写一个程序来查看我打开了哪些选项卡吗 我想编写一个程序来监控我在事情上花费了多少时间 是否有命令行程序 某种调用 chromium browser
  • 获取后台进程的退出代码

    我有一个从我的主 bourne shell 脚本中调用的命令 CMD 该命令需要很长时间 我想修改脚本如下 作为后台进程并行运行命令 CMD CMD 在主脚本中 有一个循环每隔几秒监视生成的命令 该循环还向标准输出回显一些消息 指示脚本的进
  • Linux下对多个文件进行排序

    我有多个 很多 文件 每个都非常大 file0 txt file1 txt file2 txt 我不想将它们合并到一个文件中 因为生成的文件将超过 10 场演出 每个文件中的每一行都包含一个 40 字节的字符串 现在字符串的排序相当好 大约
  • 如何在 Perl 脚本中递归查找文件/文件夹?

    我有一个 perl 脚本 我编写了该脚本来递归地搜索 Windows 文件夹中的文件 我输入搜索文本作为 perl 脚本运行时参数 以查找名称中包含此文本的文件 perl脚本如下 use Cwd file1 ARGV 0 res1 glob
  • 将管道输入转储到文件的简单方法是什么? (Linux)

    我正在寻找一个小 shell 脚本 它可以将任何内容通过管道传输到其中 并将其转储到文件中 用于电子邮件调试目的 有任何想法吗 unix 命令 tee 可以做到这一点 man tee
  • 为什么我的 Linux 应用程序引入了错误的 .so 库?

    我正在构建一个使用 NetCDF C 库的应用程序 并且 NetCDF 正在引入 HDF 4 库 然而 它正在拉动wrongHDF 4 库 我的应用程序的链接方式如下 apps1 intel bin icpc gxx name apps1

随机推荐

  • 二叉树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