Linux-文本工具
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-文本工具相关的知识,希望对你有一定的参考价值。
抽取文本的工具
文件内容:less和 cat
文件截取:head和tail
按列抽取:cut
按关键字抽取:grep
文件查看
文件查看命令:
cat,tac,rev
cat [OPTION]... [FILE]...
-E: 显示行结束符$
-n: 对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行
tac 行号反转
rev 同行反转
分页查看文件内容
more: 分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配
less 命令是man命令使用的分页器
显示文本前或后行内容
head [OPTION]... [FILE]...
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#: 指定行数
tail [OPTION]... [FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:
-f: 跟踪显示文件fd新追加的内容,常用日志监控
相当于 --follow=descriptor
-F: 跟踪文件名,相当于—follow=name --retry
tailf 类似tail –f,当文件不增长时并不访问文件
生成12位字母数字组合的字符串
[[email protected] data]#openssl rand -base64 30 | tr -dc '[:alnum:]' | head -c 12
iskr3rzbvX2Z
查看ifconfig ens33的第2行
ifconfig ens33 | head -n2 | tail n1
按列抽取文本cut和合并文件paste
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符
[[email protected] data]#cut -d: -f 1,3,5-7 /etc/passwd
root:0:root:/root:/bin/bash
bin:1:bin:/bin:/sbin/nologin
daemon:2:daemon:/sbin:/sbin/nologin
adm:3:adm:/var/adm:/sbin/nologin
[[email protected] data]#who | cut -c1-9
root
[[email protected] ~]#chkconfig iptables off
[[email protected] ~]#service iptables stop
[[email protected] data]#systemctl stop firewalld
[[email protected] data]#systemctl disable firewalld
rpm -ivh /mnt/Packages/httpd-2….rpm
service httpd start
vim /var/www/html/aaa.html
tail -f /var/log/httpd/access_log
第一列就是访问本机web的ip地址
cut和paste
显示文件或STDIN数据的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2
paste -s f1 f2
分析文本的工具
文本数据统计:wc
整理文本:sort
比较文件:diff和patch
收集文本统计数据wc
计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行
wc story.txt
39 237 1901 story.txt
行数 字数 字节数
常用选项
-l 只计数行数
-w 只计数单词总数 -连着写的就算一个单词
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度
ls | wc -l
文本排序sort
把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file(s)
常用选项
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理能够使用多次
linux:#netstat -nt
win:>tasklist
netstat -no | find pid
统计有多少个IP访问
[[email protected] html]#cut -d " " -f1 /var/log/httpd/access_log | sort -u | wc -l
抽奖
[[email protected] html]#seq 102 | sort -R | head -n1
22
取出passwd里的用户名和UID,并按UID做倒序排序
[[email protected] html]#cat /etc/passwd | cut -d: -f1,3 | sort -t: -k2 -nr
uniq
uniq命令:从输入中删除前后相接的重复的行
uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
注:连续且完全相同方为重复
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
统计访问量前10的ip,并统计每个ip访问了多少次
[[email protected] data]#cat /var/log/httpd/access_log |cut -d " " -f1 | sort | uniq -c |sort -nr | head
比较文件
比较两个文件之间的区别
diff foo.conf foo2.conf
5c5
< use_widgets = no
---
> use_widgets = yes
?注明第5行有区别(改变)
复制对文件改变patch
diff 命令的输出被保存在一种叫做“补丁”的文件中
使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
patch 复制在其它文件中进行的改变(要谨慎使用)
适用 -b 选项来自动备份改变了的文件
$ diff -u foo.conf foo2.conf > foo.patch
$ patch -b foo.conf foo.patch
练习:
1、统计远程主机登录次数的前三个IP
[[email protected] data]#last | tr -s ' ' | cut -d ' ' -f3 | grep [*.*.*.*] | sort | uniq -c | sort -nr | head -n3
2、找出ifconfig “网卡名” 命令结果中本机的IPv4地址
centos6上取ifconfig eth0的IP
[[email protected] ~]#ifconfig eth0 | head -n2 | tail -n1 | tr -s " " : | cut -d: -f4
192.168.30.128
centos7上取ifconfig ens33的IP
[[email protected] data]#ifconfig ens33 | head -n2 | tail -n1 | tr -s " " : | cut -d: -f3
192.168.30.129
3、查出分区空间使用率的最大百分比值
[[email protected] data]#df | tr -s ' ' : | cut -d: -f5 | grep [0-9] | sort -rn | head -n1
4、查出用户UID最大值的用户名、UID及shell类型
[[email protected] data]#cat /etc/passwd | cut -d: -f1,3,7 | sort -t: -k2 -n | tail -n1
5、查出/tmp的权限,以数字方式显示
[[email protected] data]#stat /tmp | grep '(' | cut -c 10-13
1777
6、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
[[email protected] data]#netstat -nt | grep [0-9] | tr -s ' ' : | cut -d: -f6 | sort | uniq -c | sort -nr
Linux文本处理三剑客
grep:文本过滤(模式:pattern)工具
grep, egrep, fgrep(不支持正则表达式搜索)
sed:stream editor,文本编辑工具
awk:Linux上的实现gawk,文本报告生成器
grep
grep: Global search REgular expression and Print out the line
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE...]
grep root /etc/passwd
grep "$USER" /etc/passwd
grep '$USER' /etc/passwd
grep `whoami` /etc/passwd
grep命令选项
--color=auto: 对匹配到的文本着色显示
-v: 显示不被pattern匹配到的行
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串
-q: 静默模式,不输出任何信息 但有输出的话$?=0,无输出的话$?=1(非0)
-A #: after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-e:实现多个选项间的逻辑or关系
grep -e ‘cat ’ -e ‘dog’ file
-w:匹配整个单词 字母、数字、下划线不能分隔单词,其它都可以
-E:使用ERE
-F:相当于fgrep,不支持正则表达式
-f:跟文件,pattern的列表 grep -f pattern.txt /etc/passwd
nmap -v -sP 172.20.180.0/24 扫描一个网段,看有哪些机器开机了
nmap -v -sP 172.20.108.0/24 | grep -B1 "Host is up" 有IP的行没有特殊关键字,搜索"Host is up",加参数-B1取其上一行即可
nmap -v -sP 172.20.108.0/24 | grep -B1 "Host is up" | grep report | cut -d " " -f5 将up的IP过滤出来
以上是关于Linux-文本工具的主要内容,如果未能解决你的问题,请参考以下文章