linux文本处理工具及正则表达式
cat命令:查看文本内容
cat [选项]... [文件]...
-E 显示行结束符
-n 显示文本内容时显示行号
-A 显示所以控制符
-b 非空行编号
-s 压缩连续的空行成一行
[root@bogon ~]# cat -n /etc/issue > test.txt ##查看文件内容并显示行号,重定向到test.txt文件中
[root@bogon ~]# cat test.txt
1 S
2 Kernel r on an m
3
[root@bogon ~]# cat > file <<EOF ##创建file文件,输入内容以EOF结束
> kernel r on an m
> EOF
[root@bogon ~]# cat file
kernel r on an m
more 分页显示
more [OPTIONS...] FILE...
less 分页显示,是man命令使用的分页器
[root@bogon ~]# less /etc/httpd.conf
[root@bogon ~]# cat /etc/httpd.conf |more
head命令 :
head [OPTION]... [FILE]...
-n 显示文件前n行,默认显示前10行
-c # 显示文件前#个字节内容
-q 不显示包含给定文件名的文件头
[root@bogon ~]# head -5 /etc/fstab ##显示文件前5行
#
# /etc/fstab
# Created by anaconda on Mon May 1 04:49:06 2017
#
[root@bogon ~]# head -q -n 5 /etc/fstab /etc/issue ##显示多个文件前5行,并且不显示文件头
#
# /etc/fstab
# Created by anaconda on Mon May 1 04:49:06 2017
#
S
Kernel r on an m
tail命令:
tail [OPTION]... [FILE]...
-f 实时查看,常用监控日志文件
-c # 显示后#字节
-n # 显示后#行,默认显示行10行
[root@bogon ~]# tail -2 /etc/passwd ##显示文件后2行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@bogon ~]# tail -f /var/log/messages ##不停地去读最新的内容,有实时监视的效果,用Ctrl+c来终止
cut命令:
cut [OPTION]... [FILE]...
-d 指明分隔符,默认tab
-f 第# 个字段
#,#[,#] :离散的多个字段,例如1,3,6
#-# :连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符
显示文件前10行,以“:”作为分隔符打印第1和第7个字段并分隔符换成空格输出:
[root@bogon ~]# head /etc/passwd |cut -d ":" -f1,7 --output-delimiter=" " ##查看系统用户使用的shell
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
[root@bogon ~]# ip addr |tail -4 |head -1 |cut -d "/" -f1 |cut -d " " -f6 ##获取ip地址
192.168.25.102
paste命令:
paste [OPTION]... [FILE]...
-d 分隔符: 指定分隔符,默认用TAB
-s 所以行合并成一行显示
[root@bogon ~]# paste /etc/resolv.conf /etc/issue ##合并输出两个文件的内容
# Generated by NetworkManager S
nameserver 202.106.46.151 Kernel r on an m
nameserver 202.106.195.68
[root@bogon ~]# paste -s /etc/issue ##对输出的内容独立占一行
S Kernel r on an m
wc命令:统计文件内容
-l 统计行数
-w 统计单词个数
-c 统计字节数
-m 只计数字符总数
-L 打印最长行的长度
[root@bogon ~]# cat /etc/passwd |wc -l ##统计文件的行数
22
[root@bogon ~]# echo "aaa bbb ccc" |wc -w ##统计输出的单词数量
3
[root@bogon ~]# echo "abcdef" |wc -m ##统计输出有多少个字节
7
文本排序:sort [options] file(s)
-r 逆序排序
-n 根据字符串数值进行比较
-f 忽略字符大小写
-u 去重。配合-c,严格校验排序;不配合-c,则只输出一次排序结果
-t 使用指定的分隔符代替非空格到空格的转换
-k 1 在位置1 开始一个key,在位置2 终止(默认为行尾)
[root@bogon ~]# head /etc/passwd |sort -t ":" -k 3nr ##以“:”分割对第三个字段数值进行倒序排列
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@bogon ~]# cat /etc/passwd |sort -t':' -k 7 -u ##以“:”分割对第7个字段排序,去重
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
bin:x:1:1:bin:/bin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
uniq 命令:从输入中删除重复的前后相接的行
uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数;
-d: 仅显示重复过的行;
-u: 仅显示唯一的行;
-i: 比较时不区分大小写
[root@bogon ~]# uniq -c ip.txt ##显示重复行出现的次数,相邻行且完全一样为重复
3 101.200.78.99
1 103.41.52.94
2 106.185.47.161
1 101.200.78.99
2 113.240.250.155
1 13.0.782.215
1 185.130.5.231
文件比较:
diff命令:比较两个文件之间的区别
-r 递归比较
-u 输出“统一的(unified )
patch 命令复制在其它文件中进行的改变(要谨慎使用!)
-b 选项来自动备份改变了的文件
[root@bogon ~]# diff file1.txt file2.txt
8c8 ##表示第8行有区别
< 113.240.250.155
---
> 133.240.250.155
替换和删除字符:
tr [OPTION]... SET1 [SET2]
-c 或——complerment :取字符集的补集
-d 或——delete :删除所有属于第一字符集的字符;
-s 或—squeeze-repeats :把连续重复的字符以单独一个字符表示
-t 或--truncate-set1 :先删除第一字符集较第二字符集多出的字符
[root@bogon ~]# tr -s 'n' < file1.txt ##删除空行
103.41.52.94
106.185.47.161
S
Kernel r on an m
106.185.47.161
[root@bogon ~]# tr A-Z a-z < file1.txt ##把大写字母换成小写
103.41.52.94
106.185.47.161
s
kernel r on an m
106.185.47.161
grep命令:过滤文本内容
grep [OPTIONS] PATTERN [FILE...]
-i 查找时忽略大小写
-v 取反
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串;
-q 静默模式,不输出任何信息
-A # after, 后#行 行
-B # before, 前#行 行
-C # context, 前后各#行 行
-e 实现多个选项间的逻辑or 关系
-w 整行匹配整个单词
-E 使用扩展正则表达式
正则表达式:
. 匹配任意单个字符;
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
* 匹配前面的字符任意次,包括0次 次贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
? 匹配其前面的字符0 或1次
+ 匹配其前面的字符至少1次
{m} 匹配前面的字符m次
{m,n} 匹配前面的字符至少m 次,至多n次
{,n} 匹配前面的字符至多n次 次
{m,} 匹配前面的字符至少m次
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
< 或 或 b 词首锚定,用于单词模式的左侧
> 或 或 b 词尾锚定;用于单词模式的右侧
<PATTERN> 匹配整个单词
() 将一个或多个字符捆绑在一起,当作一个整体进行处理
[:alpha:] 所有字母,包括大、小写
[:alnum:] 所有字母和数字
[:upper:] 所有大写字母
[:lower:] 所有小写字母
[:digit:] 所有数字
[:punct:] 所有标点符号
[:space:] 空格和Tab
扩展正则表达式:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
* 匹配前面字符任意次
? 0 或1次 次
+ 1 次或多次
{m} 匹配m次
{m,n} 至少m ,至多n次
^ 行首
$ 行尾
<, b 语首
>, b 语尾
分组 ()
后向引用:1, 2, ...
或者:a|b
C|cat: C 或cat
(C|c)at:Cat 或cat
[root@bogon ~]# grep '^(root|apache)' test.txt ##过滤以root或apache开头的行
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@bogon ~]# grep -R /sbin/nologin * ##递归从所以文件中查询匹配的内容
test.txt:bin:x:1:1:bin:/bin:/sbin/nologin
test.txt:daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@bogon ~]# ip addr |grep "dynamic" |tr -s " " |cut -d " " -f3 |cut -d "/" -f1 ##过滤ip地址
192.168.25.102
[root@bogon ~]# ip addr |grep -E -o "([0-9]{1,3}[.]){1,3}[0-9]{1,3}"
127.0.0.1
192.168.25.102
192.168.25.255
[root@bogon ~]# df -Th |tr -s " " |sort -k 6nr |head -1 ##查出使用率的最大百分比值的分区
/dev/sda1 xfs 497M 125M 373M 25% /boot
[root@bogon ~]# cat /etc/passwd |sort -t ':' -k 3n |tail -1 |cut -d ":" -f1,3,7
systemd-bus-proxy:999:/sbin/nologin ##找出uid最大值的用户,并显示用户名、UID、及shell类型
- 对List.Sort的简单研究
- 使用Apache API监控Uber的实时数据,第3篇:使用Vert.x的实时仪表板
- 走进科学:我是如何“黑了”星级酒店的
- OpenSSL空指针引用do_ssl3_write
- 针对近期“博全球眼球的OAuth漏洞”的分析与防范建议
- 黑掉美国(英国、澳大利亚、法国等)的交通控制系统
- Android 自定义标签 ViewLayout
- Identity Service - 解析微软微服务架构eShopOnContainers(二)
- 机器学习之随机森林
- Catalog Service - 解析微软微服务架构eShopOnContainers(三)
- EventBus In eShop -- 解析微软微服务架构Demo(四)
- Health Check in eShop -- 解析微软微服务架构Demo(五)
- Android Studio相见恨晚的操作锦集
- [收藏]几个常用的用正则表达式验证字符串的函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言缺失值的处理:线性回归模型插补
- R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题
- Android如何在Gradle中更改APK文件名详解
- 面试中常见的 C 语言与 C++ 区别的问题
- Linux系统实现ansible自动化安装配置httpd的方法
- 常用Linux发行版镜像源配置小结
- Linux如何处理文件已删除但空间不释放的问题
- 解析linux或android添加文件系统的属性接口的方法
- linux查看软件的安装位置简单方法
- 使用 bind 设置 DNS 服务器的方法
- Linux jdk安装及环境变量配置教程(jdk-8u144-linux-x64.tar.gz)
- centos6.6 下 安装 php7 + nginx环境的方法
- 如何优雅地删除 Linux 中的垃圾文件的方法
- Ubuntu18.04 安装 Anaconda3的教程详解
- VScode Remote SSH通过远程编辑与调试代码