当前位置: 首页 > news >正文

day20-sed-find

1.每日复盘与今日内容

1.1复盘

  • 基础正则扩展正则:^ $ ^$ .* [] | +
  • grep/egrep命令过滤
  • awk取行取列

1.2今日内容

  • sed
  • find

2.sed

  • 增删改查
  • 核心:查找,替换

sed命令选项

作用

-n

取消默认输出--不加上sed把文件内容全输出

-r

支持扩展正则

 

命令

选项

具体处理指令

参数

sed

-n

p(print)输出

文件

查找功能

1p 1,3p //p //,//p

文件

替换

s###g替换

文件

删除

d--delete

文件

 

2.根据行号范围取行
#2.范围取行,取3-5行
sed -n '3,5p'

3.过滤与正则
#3.过滤passwd文件中包含root的行或oldboy的行
sed -rn '/root|oldboy/p' /etc/passwd

4.范围与日志
  • 获取一个范围的内容,比如2025-01-11日到2025-05-01范围的日志.

  • 简易版本
#使用命令seq 20生成20行内容,过滤从包含2的行显示到包含9的行
seq 20 | sed -n '/2/,/9/p'

  • 过滤日志中指定时间范围的日志
  • 进入之前放入的access.log与secure文件
#access.log 过滤 11:05分日志到11:06分日志
#先检查是否存在:
grep '11:05:00' access.log |wc -l
grep '11:06:00' access.log |wc -l
然后过滤
sed -n '/11:05:00/,/11:06:00/p' access.log#secure日志过滤
#12号 12点12分00秒到13号15点15分00秒
grep '12 12:12:00' secure-20161219 | wc -l
grep '13 15:15:00' secure-20161219 | wc -l
然后过滤
sed -n '/12 12:12:00/,/13 15:15:00/p' secure-20161219 |wc -l

  • 取出access.log日志中从开头一直到11:30范围日志,取出第一列,统计次数最多的前5
#使用sed
sed -n '1,/11:30:00/p' access.log |awk '{print $1}' | sort | uniq -c |sort -rnk1 |head -5#使用awk
awk 'NR==1,/11:30:00/' access.log |awk '{print $1}' | sort | uniq -c |sort -rnk1 |head -5#从11:02:00 -11:30:00
awk '/11:02:00/,/11:30:00/' access.log |awk '{print $1}'|sort|uniq -c |sort -rnk1|head -5

  • 小结

1p,1,3p //p //,//p

2.2 改(替换)

  • 可以修改文件内容.
sed 's###g'
#以下也可以,为了防止你真的要写入#
s###g
s@@@g
s///g
s替换 substitute
g整行替换 global
1.基础替换
#1.先进行替换,然后查看效果
sed 's#/sbin/nologin#/bin/bash#g' passwd###2.加上-i选项,修改文件内容,有些危险
sed -i 's#/sbin/nologin#/bin/bash#g' passwd
2.使用正则

给passwd每一行开头加上一个#

sed 's@^@#@g' passwd
3.小技巧:修改前备份
  • 修改某个配置文件可以使用,如果修改多个文件实现tar打包备份即可.
sed '1,10s@^#@@g' passwd
sed -i.bak '1,10s@^#@@g' passwd

隐藏功能:反向引用(后向引用)

  • 核心:通过正则把我们要处理的内容进行分组,最后在后面通过/数字方式调用。
  • 最终目标
原始:
root:x:0:0:root:/root:/bin/bash
目标:
/bin/bash:x:0:0:root:/root:root原始:
22/Nov/2015:11:02:00 +0800
目标:
2015/Nov/22:11:02:00 +0800

  • 格式
[root@devops-99-kylin /oldboy]# echo 123456
123456
[root@devops-99-kylin /oldboy]# echo 123456| sed -r 's#(.*)#<\1#g'
<123456
[root@devops-99-kylin /oldboy]# echo 123456| sed -r 's#(.*)#<\1>#g'
<123456>
  • 调换位置
#把56和12位置互换,前两个#之间把内容分组,后两个#之间将组排序。
echo 123456 | sed -r 's#(..)(..)(..)#\3\2\1#g'
echo 123456 | sed -r 's#(..)(..)(..)#\3-\2-\1#g'

  • 调换paswd第1列和最后1列内容,中间部分保持不变。
sed -r 's#(.*)(:x.*:)(.*)#\3\2\1#g' passwd
sed -r 's#(^.*)(:x.*:)(.*)$#\3\2\1#g' passwd

小结:

  • 对行进行复杂加工处理,调换.
  • 取列.

2.3 删除

  • 按照行为单位进行的.
  • 根据行号删除
sed '3d' re.txtseq 10 | sed '3,5d'
  • 过滤与正则
sed -r '/^$|#/d' re.txt

2.4 增加

  • 类似于追加.
  • cia
a append 追加到指定行后
i insert 在指定行上面
c replace 把指定行替换
seq 10 | sed '5a lidao'
seq 10 | sed '5i lidao'
seq 10 | sed '5c lidao'


2.5 sed增删改查小结

排除/删除/etc/ssh/sshd_config文件中空行或注释行(不用真的删除)egrep/sed/awk分别实现.

#过滤(取行),三种方法起步。
egrep -v '^$|#' /etc/ssh/sshd_config
sed -r '/^$|#/d' /etc/ssh/sshd_config
awk '!/^$|#/' /etc/ssh/sshd_config#awk '!//' --输出不包含/内容/的行
sed -rn '/^$|#/!p' /etc/ssh/sshd_config

3.find

  • 根据指定的目录找出想要的内容(文件,目录)

1️⃣根据文件名查找

2️⃣根据文件大小查找

3️⃣根据文件时间查找(删除日志使用)

  • find与其他命令搭配使用

1️⃣find+tar

2️⃣find+rm

3️⃣find+cp

3.1 find各种找

find 目录 -type f -name "lidao.txt"
目录:1个或多个目录,不写默认是当前目录
-type f 类型 f--file 文件 d-directory 目录
-name 指定文件名

1.找出/etc/下以.conf结尾的文件
find /etc/ -type f -name '*.conf'

2.找出/etc/下大于100k的文件
-size #k小写,M,G
大于+100k
小于—100kfind /etc/ -type f -size +100k

3.找出/var/log/下面以.log结尾的文件7天之前的文件.
find /var/log/ -type f -mtime +7 -name '*.log'

4.查找文件不区分大小写
mkdir -p /oldboy/lidao/
cd /oldboy/lidao/
touch Lidao{01..10}.log
lidao{01..10}.log lIDao{01..10}.log
find -type f -name "lidao*.log"
find -type f -iname "lidao*.log"

5.全局查找文件

首先排除/sys/ /proc/目录,原因--内存目录

3.2 find与其他命令搭配使用

1.find+grep/rm/sed...

在/etc/下找出以.conf结尾的文件,找出这些文件中过滤包含root或oldboy的行

#1.方法1
find /etc/ -type f -name "*.conf" | xargs egrep --color 'root|oldboy'#2.方法2 find + ``或$()
egrep 'root|oldboy' `find -type f -name "*.conf"`
egrep 'root|oldboy' $(find -type f -name "*.conf")#3.方法三 find+ -exec
find /etc/ -type f -name "*.conf"  -exec egrep --color 'root|oldboy' {} \;
2.find+tar

find找出来交给tar打包压缩./backup/etc-conf.tar.gz

#1.find+|xargs
find /etc/ -type f -name "*.conf" | xargs tar zcf /backup/etc-conf.tar.gz#查看压缩文件内容
tar tf /backup/etc-conf.tar.gz#2.find ``
tar zcf /backup/etc-conf.tar.gz `find /etc/ -type f -name "*.conf"`#3.find +exec
find /etc/ -type f -name "*.conf" -exec tar zcf /backup/etc-conf.tar.gz {} \;

3.find+cp/mv

find找出文件通过cp复制走

找出/var/log下以.log结尾的文件复制到/backup/目录
#1.方法find+ xargs
find /var/log/ -type f -name "*.log" | xargs cp -t /backup/logs/
#cp -t 是先显示目标目录再显示文件位置#2.cp
cp -t /backup `find /var/log/ -type f -name "*.log"`
cp `find /var/log/ -type f -name "*.log"` /backup#3.find+ exec
find /var/log/ -type f -name "*.log" -exec cp {} /backup/logs/ \;

3.3 find小结

  • 找出各种文件.
  • find与命令配合sed,grep,rm.
  • 有些坑find+tar,find+cp/mv

4.总结

四剑客

共同点

区别与使用

find

查找文件,目录...

grep/egrep

过滤

仅仅过滤与查看

sed

过滤

替换,删除

awk

过滤

取列,计算

http://www.dtcms.com/a/291313.html

相关文章:

  • 【学习路线】C#企业级开发之路:从基础语法到云原生应用
  • 感知机-梯度下降法
  • 代码随想录day41dp8
  • 教资科三【信息技术】— 学科知识: 第三章(多媒体技术)
  • Java I/O模型深度解析:BIO、NIO与AIO的演进之路
  • CDN和DNS 在分布式系统中的作用
  • JAVA+AI教程-第三天
  • 数据库mysql是一个软件吗?
  • 主流 MQ 的关键性能指标
  • 瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
  • 5.Java的4个权限修饰符
  • 如何用 LUKS 和 cryptsetup 为 Linux 配置加密
  • 3.4 递归函数
  • GUI简介
  • CMake变量和环境变量之间的关系和区别CMAKE_EXPORT_COMPILE_COMMANDS环境变量作用
  • Weex 知识点
  • SymPy 中抽象函数求导与具体函数代入的深度解析
  • C多线程下的fwrite与write:深入挖掘与实战指南
  • 每日算法刷题Day51:7.21:leetcode 栈6道题,用时1h40min
  • 【项目实战】——深度学习.全连接神经网络
  • PostgreSQL SysCache RelCache
  • Java API (二):从 Object 类到正则表达式的核心详解
  • DevOps是什么?
  • Flutter中 Provider 的基础用法超详细讲解(一)
  • C++的“链”珠妙笔:list的编程艺术
  • JAVA序列化知识小结
  • mac终端设置代理
  • 拟合算法(1)
  • socket编程(UDP)
  • QGIS、ArcMap、ArcGIS Pro中的书签功能、场景裁剪