Linux对文本查找、检索、统计及替换的常用命令
1、Linux的体系结构
shell:命令解释器
输入ls -lrt命令,首先在默认路径下找到ls的执行文件,找到后执行ls文件,并且将附带参数-lrt传入到执行文件去执行,ls这个二进制文件一旦被传入参数去执行,就会按照要求列出文件以及权限,用户,大小相关的信息。
[root@postest-web hwstoreTomcat]# ls -lrt
总用量 20544
-rw-r--r--. 1 root root 9478216 3月 7 2016 apache-tomcat-7.0.68.zip
-rw-r--r-- 1 root root 11537183 7月 18 2019 apache-tomcat-9.0.22.zip
drwxr-xr-x. 10 root root 4096 8月 29 2019 apache-tomcat-7.0.68
drwxr-xr-x 10 root root 4096 2月 20 12:14 apache-tomcat-9.0.22
-rw-r--r-- 1 root root 364 5月 19 10:08 network.txt
-rw-r--r-- 1 root root 461 5月 19 10:33 temp.log
[root@postest-web hwstoreTomcat]# which ls
alias ls='ls --color=auto'/bin/ls
[root@postest-web hwstoreTomcat]# echo $SHELL
/bin/bash
[root@postest-web hwstoreTomcat]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[root@postest-web hwstoreTomcat]#
echo $SHELL查看当前shell版本
cat /etc/shells 查看本机器支持的一些版本
chsh -s 后接shell路径 切换到指定的版本
2、查找特定文件
问:我们如何找到名为某某的文件
find path [options] params
作用:在指定目录下查找文件,任何位于参数之前的字符串,都将被视为预查找的目录名,如果使用该文件时,不设置任何参数,则find指定将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
find -name temp.log 当前目录
find / -name temp.log 根目录查询递归查找所有temp.log文件
find ~ -name “apache-tomcat-7*” 从用户的home目录寻找匹配以apache-tomcat-7开头的文件
find ~ -iname temp.* 忽略文件名大小写查找
man find 查看find帮助文档
[root@postest-web hwstoreTomcat]# find -name "apache-tomcat-7*"
./apache-tomcat-7.0.68
./apache-tomcat-7.0.68.zip
[root@postest-web hwstoreTomcat]#
3、检索文件内容
grep [option] pattern file
作用:用户查找文件里符合条件的字符串,可使用正则表达式查找
grep “saleNo” temp* 符合字符串条件的当前行
管道操作符|
可将指令连接起来,前一个指令的输出作为后一个指令的输入
find ~ | grep “temp”左边的命令是递归列出所有的文件以及目录,满足条件后,右边查询上一个输出中包含target字符串的文件
管道命令只能处理前一个命令正确输出,不处理错误输出
grep “partial[true]” temp.log 查找在内容里包含某个指令字段的文件,并将相关的行展示出来
grep -o “engine[[0-9A-Z]*]” 通过选择-o选项,筛选出相关的符合正则表达式的内容
grep -v “grep” 过滤掉包含相关字符串的内容
temp.log文件内容:
partial[true]{saleNo[QZ2020051810022058],amount[1339.76],confirmDate[2020-05-18 15:41:19]},{saleNo[SA2020061810022023],amount[732.19],confirmDate[2020-05-18 15:41:19]},{saleNo[AS2020011210022017],amount[946.39],confirmDate[2020-05-18 15:41:19]}
partial[true]{saleNo[SA2020061810022023],amount[732.19],confirmDate[2020-05-18 15:41:20],accountingDate[2020-05-01]}
partial[false]{saleNo[SQ2020051810021237],amount[309.00],confirmDate[2020-05-18 15:41:21]}}
对temp.log文件筛选出partial为true的引擎且将相关行中的saleNo展示出来:
[root@postest-web hwstoreTomcat]# grep "partial\[true\]" temp* | grep -o 'saleNo\[[0-9A-Z]*\]'
saleNo[QZ2020051810022058]
saleNo[SA2020061810022023]
saleNo[AS2020011210022017]
saleNo[SA2020061810022023]
[root@postest-web hwstoreTomcat]#
4、对日志内容做统计
awk [options] “cmd” file
作用:一次读取一行文本,按输入分隔符进行切片,切成多个组成部分;将每个切片直接保存在内键的变量中,$1$2…($0表示行的全部);支持对单个切片的判断,支持循环判断,默认分隔符为空格
內键变量NR,表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的分隔符为换行符,即读取的数据行数,第一行NR==1
修改awk分隔符:-F表示以什么符号做分隔符去分割行内内容
[root@postest-web hwstoreTomcat]# tail network.txt
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 48 115.28.159.6:ssh 113.46.178.155:63873 ESTABLISHED
tcp 0 0 localhost:mysql localhost:40334 ESTABLISHED
tcp 0 0 localhost:mysql localhost:40504 ESTABLISHED
tcp 0 0 115.28.159.6:web 173.47.178.175:63870 ESTABLISHED
tcp 0 0 115.28.159.6:web 173.47.178.175:63870 ESTABLISHED
udp 1 0 localhost:50500 localhost:mysql ESTABLISHED
tcp 1 0 116.38.139.7:s1h localhost:mysql ESTABLISHED
tcp 1 0 115.28.159.6:4691 143.46.134.154:64872 ESTABLISHED
[root@postest-web hwstoreTomcat]# awk '{print $1,$4}' network.txt
Proto Local
tcp 115.28.159.6:ssh
tcp localhost:mysql
tcp localhost:mysql
tcp 115.28.159.6:web
tcp 115.28.159.6:web
udp localhost:50500
tcp 116.38.139.7:s1h
tcp 115.28.159.6:4691
[root@postest-web hwstoreTomcat]# awk '$1=="tcp" && $2==1{print $0}' network.txt
tcp 1 0 116.38.139.7:s1h localhost:mysql ESTABLISHED
tcp 1 0 115.28.159.6:4691 143.46.134.154:64872 ESTABLISHED
[root@postest-web hwstoreTomcat]# awk '($1=="tcp" && $2==1) || NR==1 {print $0}' network.txt
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 1 0 116.38.139.7:s1h localhost:mysql ESTABLISHED
tcp 1 0 115.28.159.6:4691 143.46.134.154:64872 ESTABLISHED
[root@postest-web hwstoreTomcat]# awk -F "," '{print $2}' temp.log
amount[1339.76]
amount[732.19]
amount[309.00]
[root@postest-web hwstoreTomcat]#
问:对temp.log文件筛选出partial为true的引擎,并统计该日志里这些引擎partial为true的次数(这样统计的意义在于当我们发现一旦某个检索引擎超过一定次数的时候,则说明该引擎需要从集群中摘掉并且进行紧急修复)
首先定义一个数组enginearr,用它的下标来保存引擎的名字,引擎的名字一旦相同,则对应的值就在原来的基础上累加,END表示扫描结束后进行什么操作,在执行结束后遍历enginearr数据,将数组下标和对应的值打印出来:
[root@postest-web hwstoreTomcat]# grep "partial\[true\]" temp* | grep -o 'saleNo\[[0-9A-Z]*\]' | awk '{saleNoArr[$1]++}END{for(i in saleNoArr)print i "\t" saleNoArr[i]}'
saleNo[AS2020011210022017] 1
saleNo[SA2020061810022023] 2
saleNo[QZ2020051810022058] 1
[root@postest-web hwstoreTomcat]#
5、批量替换文件内容
sed [option] ‘sed command’ filename 流编辑器
作用:利用正则表达式对行进行处理,适合做文本编辑
sed ‘s/^Str/String/’ replace.java 使用s针对字符串,将以Str开头的字符串替换为String,仅用来展示不保存
sed -i ‘s/^Str/String’ replace.java 保存了替换行为(-i)
sed -i ‘s/\.$/\;/’ replace.java 将以.结尾的字符串替换为;且保存
sed -i ‘s/Jack/me/g’ replace.java 使用g全局替换Jack为me
依据规则删除某行:
sed -i ‘/^ *$/d’ replace.java 使用d表示替换行
sed -i ‘/Interger/d’ replace.java 删除Interger所在的行
[root@postest-web hwstoreTomcat]# cat replace.java
Str a = "The beautiful girl's boy friend is Jack".
Str b = "The beautiful girl often chats with me and Jack is Jack".
Str c = "The beautiful girl loves me so much".
[root@postest-web hwstoreTomcat]# sed 's/^Str/String/' replace.java
String a = "The beautiful girl's boy friend is Jack".
String b = "The beautiful girl often chats with me and Jack is Jack".
String c = "The beautiful girl loves me so much".
[root@postest-web hwstoreTomcat]# cat replace.java
Str a = "The beautiful girl's boy friend is Jack".
Str b = "The beautiful girl often chats with me and Jack is Jack".
Str c = "The beautiful girl loves me so much".
[root@postest-web hwstoreTomcat]# sed -i 's/^Str/String/' replace.java
[root@postest-web hwstoreTomcat]# cat replace.java
String a = "The beautiful girl's boy friend is Jack".
String b = "The beautiful girl often chats with me and Jack is Jack".
String c = "The beautiful girl loves me so much".
Linux对文本查找、检索、统计及替换的常用命令相关推荐
- Linux文件系统(文件系统类型、设备文件、常用命令、U盘与光盘挂载)
Linux文件系统(文件系统类型.设备文件.常用命令.U盘与光盘挂载) 本篇文章是Linux文件系统整块集合,包含了Linux文件系统介绍.设备文件介绍.常用文件系统命令(查看.修复与配置).挂载 ...
- linux中文本查找命令,Linux常用的文本查找命令 find
一.常用的文本查找命令 grep.egrep命令 grep:文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,先是能够被模式匹配到的行.后面跟正则表达式,让grep工具相当强大.-E之后还支 ...
- Linux fing cd 查找文件/文件夹并进入目录命令
查找文件|文件夹并进入目录命令:cd $() [root@localhost /]# cd $(dirname "`find / -name 'ifcfg-ens33'`") // ...
- linux查找代码cd文件夹,Linux fing cd 查找文件/文件夹并进入目录命令
查找文件|文件夹并进入目录命令:cd $() [root@localhost /]# cd $(dirname "`find / -name 'ifcfg-ens33'`") // ...
- 《Linux编程》学习笔记 ·001【基本操作、常用命令】
注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.基本操作 1.查看目录/文件 2.路径跳转 (1 ...
- linux vi文件出现o e r d,vim常用命令大全
在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format.使 ...
- Linux引出环境变量的关键字,学习记录008-linux常用命令/设置系统and用户环境变量two(示例代码)...
修改文件 vi vi 是linux自带的,vim是vi的升级版 命令:vi 文件名 如果文件存在,那么就直接进入对应的文件的编译模式,如果文件不存在,那么就进入以文件名命名的空文件的编译模式 vi ...
- linux下开发python爬虫_linux入门教程—开发常用命令
开发常用命令 查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. 查看一个程序是否运行 ps –ef|grep tomcat 查看所有有 ...
- Linux 系统 uos / deepin 系统安装过程中 最全常用命令及问题 总结
本博客已暂停更新,为了您更好的阅读,请转至新博客https://www.whbwiki.com/1296.html 此教程用来解决uos/deepin系统安装过程中的一系列问题,其他linux发行版适 ...
- Linux运维后台进程管理之Supervisor配置和常用命令常见问题案例和管理odoo后台进程
目录 Supervisor是什么? 安装 配置 实例配置 启动 Supervisor常用命令 常见错误 配置文件出错,没有开放http接口或相关配置有问题 Supervisor未启动,无法运行supe ...
最新文章
- 修Bug哪家强?谷歌:Linux,比我都修得好
- iphone圆点怎么弄出来_新款iPhone放出终极大招,果粉:就没高级点的嘛
- 计算机网络:第二章 物理层
- p4 是否能自动merge
- Go会接替Java,成为下一个企业级编程语言吗?
- python反转列表的三种方式
- Vijos 1100 (区间DP)
- 【WebRTC---序篇】(二)Windows平台WebRTC源码编译
- 设置ArcGIS的外观改回到出厂
- win10电脑黑屏只有鼠标箭头_电脑开机就黑屏,只显示鼠标怎么办?别急,简单几步,轻松解决!...
- JAVA Map集合类简介
- zrender源码分析4--初始化Painter绘图模块2
- MySQL Shell 教程
- 利用MS的CASTEP模块模拟Pd(110)表面CO分子的吸附
- px4原生源码学习-(4)--Nuttx 实时操作系统编程
- 校园 计算机网络设置路由器,GSWiFi路由器校园网怎么设置
- 微软Kinect for windows SDK 使用教程 (NUI部分)
- 优雅的git commit
- 火狐查看密码_在Firefox中查看和删除存储的密码
- ATTck 入口点 —— 其他攻击
热门文章
- [zt]再谈QQ自动登陆器:提供C#源码下载(下)
- c语言编程小球运行结果是,如何用C语言编程一个滚动的小球 最好是五彩的 滚动的...
- 蜂窝物联网与嵌入式SIM(eSIM)
- 1195 口袋的天空
- 教你在线免费PDF转Word,建议收藏
- HDLBITS笔记32:有限状态机二(Fsm3comb、Fsm3onehot、Fsm3、Fsm3s)
- BAT齐聚阿里安全-ASRC生态大会:呼吁联合共建网络安全白色产业链
- 自监督学习(四)Joint Unsupervised Learning of Deep Representations and Image Clusters
- Android Binder总结(转自Cloud Chou's Tech Blog)
- 阿里云服务器的搭建和部署(小白教程)