文本处理三剑客命令

2023-10-18 11:36:10 浏览数 (1)

一、sed 

一 、sed

  • sed->流式编辑器:擅长用既定的规则编辑不同的文件 
  • sed 对比 vim
    • sed可以把处理文件的规则事先写好,然后用同一套规则编辑多个文件而vim只能一个个编辑===》用于用一套规则处理多个文件
    • 2、sed处理文件,一次只处理一行,即同一时间内存中只有文件的一行内容无论文件多大,都不会对内存造成过大的压力====》用于处理大文件
  • sed用法
    • sed 选项 '规则' 文件
    • 选项:-n 取消默认输出
      • -i 把输出到屏幕中的内容(规则处理的结果 默认输出的结果)
  • 规则:定位 命令
  • 定位方式:
    • 行号定位:
      • sed '1p' a.txt 打印第一行
      • sed '1,3p' a.txt 
      • sed '3p;5p' a.txt

正则定位

代码语言:javascript复制
sed '/^egon$/p' a.txt          #这一行只能有egon这个字符
代码语言:javascript复制
[root@localhost ~]# sed '1,/egon/p'  bug        #打印第一行首次匹配到/egon/的行
  • 没有定位代表定位所有行
代码语言:javascript复制
[root@localhost ~]# sed ' ' bug
  • 命令:
    • d           删除
    • p           打印
    代码语言:javascript复制
    [root@localhost ~]# sed '1d;3d;5d' bug
    • s///gi      替换
代码语言:javascript复制
[root@localhost ~]# sed '1d;3d;5d' bug
代码语言:javascript复制
  sed '1,3s/egon/EGON/' 文件
  sed '/^egon/s/egon/EGON/' 文件

二 、awk

  • 主要擅长处理有规律的文本,按照某一段截取,主要用于做一些格式化处理
  • 用法:awk 选项 '规则' 文件路径
  • 选项:
    • -F: 指定分隔符 
    • 规则:定位 命令
  • 定位:
    • 行号定位:
代码语言:javascript复制
awk -F: 'NR == 3{print $1,$3}' /etc/passwd
awk -F: 'NR >= 3 && NR <=5{print $1,$3}' /etc/passwd  
awk -F: 'NR <= 3 || NR >=8{print $1,$3}' test.txt 
awk -F: 'NR == 3 || NR ==5 || NR==7{print $1,$3}' test.txt
  • 正则定位
代码语言:javascript复制
awk -F: '//{print $1,$2}' 文件路径
    • 没有定位代表定位所有行
  • 命令:{print $n}
  • 用法
    • sed 选项 '定位 命令' 文件路径
    • awk -F: '定位 命令' 文件路径
    • sed 选项 '3,5p' 文件路径
    • awk -F: 'NR>=3 && NR<=5{print $0}' 文件路径
代码语言:javascript复制
[root@localhost ~]# head -10 /etc/passwd >1.txt

[root@localhost ~]# awk -F: 'NR<=3 || NR <=8{print $1,$3}' 1.txt

[root@localhost ~]# awk -F: 'NR>=3 && NR<=5{print $0}' 1.txt 

[root@localhost ~]# awk -F' ' '{print $1,$2}' 2

[root@localhost ~]# ifconfig ens33 | awk 'NR == 2{print $0}'
  inet 192.168.12.239 netmask 255.255.255.0 broadcast 192.168.12.255

[root@localhost ~]# ifconfig ens33 | awk 'NR == 2{print $2}'
  192.168.12.239

[root@localhost ~]# ifconfig ens33 | awk 'NR == 2{print $2}' | awk -F. '{print $1}'
  192


[root@localhost ~]# awk -F: '{print NF}' 1.txt  #这个文件以:分割,然后打印出每一行被切了多少的数量

三 、grep

  • 擅长过滤:从一堆内容筛选出你想要的内容
  • grep 选项 "过滤规则" 文件
  • grep -n "root" /etc/passwd # 显示行号
  • grep -i "" /etc/passwd # 忽略大小写
  • grep -l 'egon' a.txt # 如果文件中但凡是存在包含egon的行就算过滤成功,会返回文件名
代码语言:javascript复制
[root@localhost ~]# grep -rl 'root' /etc/passwd
  • linux进程查看
代码语言:javascript复制
[root@localhost ~]# ps aux | grep '[s]sh'

[root@web01 ~]# ps aux |grep 'vim'
  root 9825 0.0 0.5 151692 5212 pts/1 S  12:05 0:00 vim a.txt
  root 10190 0.0 0.0 112724 988 pts/0 R  12:30 0:00 grep --color=auto vim

[root@web01 ~]# ps aux |grep '[v]im'
  root 9825 0.0 0.5 151692 5212 pts/1 S  12:05 0:00 vim a.txt

[root@web01 ~]# kill -9 9825
  • windows关闭进程
代码语言:javascript复制
快捷键:ctrl alt delete

C:Usersoldboy>taskkill /F /PID 12080
成功: 已终止 PID 为 12080 的进程。

C:Usersoldboy>tasklist | findstr "WeChat.exe"
WeChat.exe 11412 Console 1 127,836 K

C:Usersoldboy>taskkill /F /PID 11412
成功: 已终止 PID 为 11412 的进程。

0 人点赞