Linux 高效检索文件命令

Linux常用文件操作命令

sed 流编辑器 Stream EDitor

 -n, --quiet, --silent    取消自动打印模式空间
 -e 脚本, --expression=脚本   添加“脚本”到程序的运行列表
 -f 脚本文件, --file=脚本文件  添加“脚本文件”到程序的运行列表
 --follow-symlinks    直接修改文件时跟随软链接
 -i[扩展名], --in-place[=扩展名]    直接修改文件(如果指定扩展名就备份文件)
 -l N, --line-length=N   指定“l”命令的换行期望长度
 --posix  关闭所有 GNU 扩展
 -r, --regexp-extended  在脚本中使用扩展正则表达式
 -s, --separate  将输入文件视为各个独立的文件而不是一个长的连续输入
 -u, --unbuffered  从输入文件读取最少的数据,更频繁的刷新输出
 --help     打印帮助并退出
 --version  输出版本信息并退出
 
 
 -a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)-c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
 -d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
 -i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)-p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
 -s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
sed语法
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
# OPTION 命令参数 script脚本信息 input File 输入文件... 可以多个 
查看

使用sed 查看-n 通常和 p 一起使用达到只展示对应行的效果

# 查看4-10 行内容
[root@mdj-node linuxcommadtest]# sed -n '4,10 p' sed2.txt
 -i[扩展名], --in-place[=扩展名]    直接修改文件(如果指定扩展名就备份文件)
 -l N, --line-length=N   指定“l”命令的换行期望长度
 --posix  关闭所有 GNU 扩展
 -r, --regexp-extended  在脚本中使用扩展正则表达式
 -s, --separate  将输入文件视为各个独立的文件而不是一个长的连续输入
 -u, --unbuffered  从输入文件读取最少的数据,更频繁的刷新输出
 --help     打印帮助并退出
 
 # 查看以--开头的内容
[root@mdj-node linuxcommadtest]# sed -n '/^.--/ p' sed2.txt
 --follow-symlinks    直接修改文件时跟随软链接
 --posix  关闭所有 GNU 扩展
 --help     打印帮助并退出
 --version  输出版本信息并退出
 
 # 忽略大小写打印 含有 “a” 字符的行
[root@mdj-node linuxcommadtest]# sed -n '/a/I p' sed.txt
chen peng yu ai liang xinxin
java is java java jav ja j p
budeliAo
查找

通常查找功能也是通过-np实现 但是会和通配符结合使用查找更加准确

# 查找有 "ja" 的行

[root@mdj-node linuxcommadtest]# sed -n '\%ja% p' sed.txt
java is java java jav ja j p

# 删除 2-10 输出 如果有两个文件则行数逻辑会拼接到一块
[root@mdj-node linuxcommadtest]# sed '2,10 d' sed2.txt
 -e 脚本, --expression=脚本   添加“脚本”到程序的运行列表
 --version  输出版本信息并退出
 -a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)-c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
 -d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
 -i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)-p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
 -s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
查看-新增

查看并且新增通过i命令实现

# 在第二行后面追加 it-tes
[root@mdj-node linuxcommadtest]# sed -e 2a\it-tes  sed.txt
chen peng yu ai liang xinxin
java is java java jav ja j p
it-tes
budeliAo
<><><><><><><><><>

# 在第一行前面追加 sedsed
[root@mdj-node linuxcommadtest]# sed '1 i\sedsed' sed.txt
sedsed
chen peng yu ai liang xinxin
java is java java jav ja j p
budeliAo
<><><><><><><><><>

替换

替换分为整行替换和字符串替换

# 将第二行替换为 “python”
[root@mdj-node linuxcommadtest]# sed '2 c\python' sed.txt
chen peng yu ai liang xinxin
python
budeliAo
<><><><><><><><><>

字符串替换 字符串替换用 s命令

# 将1到4的 li -》 产
[root@mdj-node linuxcommadtest]# sed '1,4 s/li/产/' sed.txt
chen peng yu ai 产ang xinxin
java is java java jav ja j p
bude产Ao
<><><><><><><><><>

操作原文件 通过 -i 实现 i会对文件进行修改

# 删除第一行
[root@mdj-node linuxcommadtest]# sed -i '1 d' sed.txt
You have mail in /var/spool/mail/root
[root@mdj-node linuxcommadtest]# cat sed.txt | head
java is java java jav ja j p
budeliAo
<><><><><><><><><>

# 修改之前备份源文件
[root@mdj-node linuxcommadtest]# sed -i.bak 's/a/A/' sed.txt
[root@mdj-node linuxcommadtest]# cat sed.txt.bak
java is java java jav ja j p
A/s
budeliAo
A/s
<><><><><><><><><>
A/s
[root@mdj-node linuxcommadtest]# cat sed.txt
jAva is java java jav ja j p
A/s
budeliAo
A/s
<><><><><><><><><>
A/s

# 加上 g 表示全局替换
[root@mdj-node linuxcommadtest]# sed -i.bak 's/a/A/g' sed.txt
You have mail in /var/spool/mail/root
[root@mdj-node linuxcommadtest]# cat sed.txt
jAvA is jAvA jAvA jAv jA j p
A/s
budeliAo
A/s
<><><><><><><><><>
A/s

awk

工作原理:逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

sed有所不同,sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符&&表示“与”、||表示“或”、!表示“非”;还可以进行简单的数学运算,如+-*/%^分别表示加、减、乘、除、取余和乘方。

语法
awk ‘BEGIN {commands} pattern {commands}END{commands}' file1
BEGIN:处理数据前执行的命令
END:处理数据后执行的命令
pattern:模式,每一行都执行的命令 pattern里的命令会匹配每一行去处理
BEGIN和END里的命令只是执行一次

内建变量

# 这些内建变量可以直接在 script 中直接使用
FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’
查看

查看用 {print}

# 查看文件内所有内容
[root@mdj-node linuxcommadtest]# awk {print} clearsky
[5]焦宇
[6]陈红卫
[7]高妮娜
[8]87-89.
[9]2021.23-30.
[10](10):61-65.
[11]2023,32(03):60-63.
[12]王旭光
[13]JoKharchenko K ,Beznosyk
[14]基于信息技术的超市后台管理系统研究

# 查看 1~3 行内容
[root@mdj-node linuxcommadtest]# awk 'NR==1,NR==3{print}' clearsky
[5]焦宇
[6]陈红卫
[7]高妮娜

# 查看 1 || 3 内容
[root@mdj-node linuxcommadtest]# awk 'NR==1||NR==3{print}' clearsky
[5]焦宇
[7]高妮娜

# 查看 k 结尾的内容
[root@mdj-node linuxcommadtest]# awk '/k$/{print}' clearsky
[13]JoKharchenko K ,Beznosyk
计算
# 统计出现 2 字符的行数
[root@mdj-node linuxcommadtest]# awk 'BEGIN{x=0};/2/{x++};END{print x}' clearsky
3

# 输出所有偶数行内容
[root@mdj-node linuxcommadtest]# awk 'NR%2==0{print}' clearsky
[6]陈红卫
[8]87-89.
[10](10):61-65.
[12]王旭光
[14]基于信息技术的超市后台管理系统研究

# 输出每个列中的第二个字符串 默认用空格分隔
[root@mdj-node linuxcommadtest]# awk '{print $2}' clearsky




K
# 输出记录和行号 -F ":" 的意思是以 : 为分隔
[root@mdj-node linuxcommadtest]# awk -F ":" '{print NR,$0}' clearsky
1 [5]焦宇
2 [6]陈红卫
3 [7]高妮娜
4 [8]87-89.
5 [9]2021.23-30.
6 [10](10):61-65.
7 [11]2023,32(03):60-63.
8 [12]王旭光
9 [13]JoKharchenko K ,Beznosyk
10 [14]基于信息技术的超市后台管理系统研究

# 输出以 : 分隔的里面第二个字段包含61-65的行
[root@mdj-node linuxcommadtest]# awk -F ":" '$2~"61-65"{print}' clearsky
[10](10):61-65.
结合管道
# 通过 wc -l 命令获取文件行数
[root@mdj-node linuxcommadtest]# awk '{print | "wc -l"}' clearsky
10

# 查看cpu 空闲率
[root@mdj-node linuxcommadtest]# top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print $1}'
45.2
# 显示系统上次重启时间
[root@mdj-node linuxcommadtest]# date -d "$(awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H:%M:%S"
2024-03-17 15:38:56

管道

管道命令是一个 | 当在两个命令之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这两个命令就可以形成一个管道。大部分的 Linux 命令都可以用来形成管道。

并且只有前面命令的输出可以作为后面命令的输入的时候才能处理

示例
# 查看是否有sed.txt 字符存在则输出行 所以不仅仅是文件名,也可以是文件前缀 或者 其他字眼 通常文件名
[root@mdj-node linuxcommadtest]# ls -al | grep sed.txt
-rw-r--r--  1 root root   69 May 30 10:50 sed.txt
-rw-r--r--  1 root root   69 May 30 10:48 sed.txt.bak

# 将目录列表输入到文件中
[root@mdj-node linuxcommadtest]# ls -al | cat  > log.txt
You have mail in /var/spool/mail/root
[root@mdj-node linuxcommadtest]# ls
abc.txt  clearsky  Docker.md  log.txt  sed2.txt  sed.txt  sed.txt.bak
[root@mdj-node linuxcommadtest]# cat log.txt
total 36
drwxr-xr-x  2 root root 4096 May 30 13:26 .
dr-xr-x---. 7 root root 4096 May 30 11:23 ..
-rw-r--r--  1 root root   71 May 29 18:30 abc.txt
-rw-r--r--  1 root root  199 May 30 11:23 clearsky
-rw-r--r--  1 root root 6726 May 29 17:32 Docker.md
-rw-r--r--  1 root root    0 May 30 13:27 log.txt
-rw-r--r--  1 root root 1335 May 30 09:21 sed2.txt
-rw-r--r--  1 root root   69 May 30 10:50 sed.txt
-rw-r--r--  1 root root   69 May 30 10:48 sed.txt.bak

# 统计登录人数
[root@mdj-node linuxcommadtest]# who | wc -l
2


ps

ps 用于查看系统进程,进程什么时候开始运行的,哪个用户运行的,占用了多少资源。

语法
ps [options] 
# options为可选参数 参数可以组合起来
进程命令参数

参数可组合使用 常见组合有

  • -ef 查看所有进程
  • -aux 详细显示所有进程
  • 还可以结合管道查看指定进程
-e     # 显示所有进程
-f     # 显示所有字段(UID,PPIP,C,STIME字段)
-h     # 不显示标题
-l     # 长格式
-w     # 宽输出
-a     # 显示一个终端的所有进程
-r     # 只显示正在运行的进程。
-u     # 显示当前用户进程和内存使用情况
-x     # 显示没有控制终端的进程
–sort  # 按照列名排序
展示字段含义
UID    # 用户ID,即进程的拥有者
PID    # 进程ID
PPID   # 该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程被称为僵尸进程
C      # cpu的占用率,形式是百分数(%)
STIME  # 进程开始启动时间
TTY    # 终端设备,发起该进程的设备识别符号,如果显示‘ ?’表示该进程并不是由终端发起
TIME   # 进程的执行时间
CMD    # 该进程的名称或对应的路径

# 实例
[root@mdj-node ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Mar17 ?        00:11:28 /usr/lib/systemd/systemd --system --deserialize 20
root         2     0  0 Mar17 ?        00:00:00 [kthreadd]
root         4     2  0 Mar17 ?        00:00:00 [kworker/0:0H]
root         6     2  0 Mar17 ?        00:00:53 [ksoftirqd/0]

less

less 是一个文本查看命令,可以查看任意大小的文件。支持滚动翻页搜索和标记

语法
less [options] file
命令参数

常用命令参数

-b    # 设置缓冲区大小 加快文件加载速度
-e    # 在莫问加一个end标记 可以通过 q 键退出查看
-F    # 如果文件不超过页面大小直接显示,否则采用less的交互窗口
-h    # 显示命令帮助信息
-n    # 显示行号
-V    # 将连续的空白行压缩
示例
# 查看文件
less fileName

# 输入 / 或者 ? 可进行查找 / 从头开始  ? 从末尾开始

# 显示行号查看
less -n file 

# m 可以标记某一行
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值