Linux命令多彩文本,Linux命令之文本处理工具

Linux一切皆文件,因此对文本就会频繁操作,增删改查,也就有对文本处理的各种工具,下面介绍常用工具,以及各工具常用用法,常用案例等

一、文本的查看

1、cat -n 文件 加行号显示文本

-E 文件 显示回车符号

-A 文件 显示文本所有字符 $表示换行, ^I表示tab ,^M表示回车(一般win系统文本才有)

-s 文件 当遇到有连续两行以上的空白行,就代换为一行的空白行

-v windos上文本文件 显示非打印”显示控制字符除了LFD和标签使用` ^”具有高位设置的符号和前面字符“m”

cat file1 file2 >file3 把两个文件合并一个文件

举例:

3288e3912871

image.png

-n用法

3288e3912871

image.png

-E用法

3288e3912871

image.png

-A用法

这个类似-E,显示多一些看不到的字符,ceshi.txt是在Windows下建立的文本

3288e3912871

image.png

-s用法

3288e3912871

image.png

-v用法

这个可以和-A结合理解记忆

3288e3912871

image.png

用cat合并两个文件

3288e3912871

image.png

2、tac 文件 倒着显示,是以行,颠倒显示

3288e3912871

image.png

3、echo 字符 | rev 反向显示,是以列 左右倒着

3288e3912871

image.png

4、less 分行显示

more 分页显示

这两个命令常用,一般和其它命令组合使用较多,比如查看很长的命令帮助文档,需要分页显示查看

3288e3912871

image.png

3288e3912871

image.png

按空格向下翻页查看

5、head -n 3 文件 显示文件前三行

-c 20 文件 显示头部20个字符

3288e3912871

image.png

6、tail -n3 文件 显示文件后三行

-f 文件 动态观察文件 用于观察日志文件,监控文件

-F 文件 和f一样,多了文件被删除,会有提示

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

tailf类似tail -f

前者只在修改时监控扫描文件内容,不耗资源;后者频繁扫描监控文件内容,耗资源,因此一般都会用tailf

7、cut 取出特定列

cut -d: -f1,3 文件 以冒号为分隔符,取出内容第一和第三列

-d 指明分隔符 默认以tab为分隔符

--output-delimiter=" " 取出的列,以什么字符隔开

-f1 取第一列 混合使用:f1-3,7 第一列到第三列和第七列

-c 字符切割 一般列比较整齐的使用

3288e3912871

image.png

3288e3912871

image.png

paste file1 file2 两个文件 file1第几行对应file2第几行 左右对应显示显示

-s file1 file2 两个文件 file1第几行对应file2第几行 上下对应显示显示

3288e3912871

image.png

3288e3912871

image.png

练习------常用案例:

ss -nt | tr -s " " : | grep ESTAB | cut -d: -f6 取出和我对话的IP

3288e3912871

image.png

df | grep /dev/sd | tr -s " " % | cut -d% -f5 取出磁盘利用率信息

3288e3912871

image.png

cat /etc/passwd | head -n5 | cut -d: -f1,3 | tr ":" "-" 取出用户和UID

3288e3912871

image.png

取当前主机指定网卡的IP:

ifconfig ens33 | grep netmask |tr -s " "| cut -d" " -f3 centos 7上

3288e3912871

image.png

ifconfig eth0 | grep Mask |tr -s " " : | cut -d: -f4 centos 6上

3288e3912871

image.png

生成指定位数的随机口令:

cat /dev/urandom | tr -dc '[:alnum:]' | head -c30

openssl rand -base64 30 | head -c30

3288e3912871

image.png

二、文本的统计-分析

1、wc 文件 显示文件有几行,几个单词,几个字节

-l 文件 只统计行

-w 文件 只统计单词

-c 文件 只统计字节

-m 文件 只统计字符 一个汉字是一个字符、三个字节

-L 文件 只统计最长行的长度

3288e3912871

image.png

3288e3912871

image.png

2、sort -nr -t: -k3 文件 取出以冒号分隔的第三列按数字反向排序

-n 按数字排序

-t 按什么分隔符

-k 哪一列排序

-r 反向排序

-u 删除输出重复行

3288e3912871

image.png

3288e3912871

image.png

3、uniq 文件 相邻一样的合并输出显示

-c 文件 显示合并的字符有几个同样的

-u 文件 只显示不重复的

-d 文件 只显示重复的

3288e3912871

image.png

练习------常用案例:

提取网站访问日志文件访问次数高的前十名

tr -s " "

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

ss -nt 查询并发连接的远程IP最多的前三个IP

ss -nt | grep ESTAB | tr -s " " :|cut -d: -f6|sort|uniq -c|sort -nr |head -3|tr -s " " | cut -d" " -f3

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

比较文件

4、diff file1 file2 比较文件内容不同

-u

3288e3912871

image.png

通过差异存档,可以恢复删掉的文件

diff f3 f4 -u >f8

rm f4

patch -b f3 f8

注意:系统没有装patch命令的包,需要取手动装一下

恢复的文件f4,会覆盖了f3,f3内容是原f4内容,原f3会生成一个备份文件

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

三、文本处理三剑客

grep sed awk 这里主要讲grep,其它两个后面单独一个命令写一篇

1、grep 行搜索并筛选

egrep=grep -E

fgrep=grep -F

grep 关键字 文件或目录

关键字可以是字符,可以是命令(用反向单引号扣起来命令),也可以引用变量(用双引号括起来或者不用)

-v 反选包含关键字以外的行

3288e3912871

image.png

-i 忽略关键字大小写

3288e3912871

image.png

-n 显示包括关键字的行以及行号

-c 匹配到关键字的行,有几行

3288e3912871

image.png

-q 匹配到关键字的行,只是不显示(这种用法,后面用到,用处:只想知道匹配到还是没匹配到,匹配结果不关心)

3288e3912871

image.png

-o 仅显示匹配到的关键字

3288e3912871

image.png

-A n 包含关键字行的后n行也显示

-B n 包含关键字行的前n行也显示

-C n 包含关键字行的前后各n行也显示

3288e3912871

image.png

-e 或关系,多个关键字筛选

3288e3912871

image.png

-w 匹配关键字是一个词,不是一部分,除了数字、字母、下划线不可以作为单词的分隔符,其它键盘字符都可以

3288e3912871

image.png

四、正则表达式

基本正则表达式:BRE

扩展正则表达式:ERE

正则表达式匹配的是内容里字符串

元字符分类:

1、字符匹配

. 一个任意字符串

[] 任意单一的字符

[^] 排除

[:alnum:] 数字和字母

[:alpha:] 字母

[:space:] 空格

[:digit:] 数字

[:loewr:] 小写字母

[:upper:] 大写字母

[:blank:] 空白字符

2、匹配次数

* 星号前面字符重复任意次,包括零次

.* 任意字符

\? 匹配前面字符重复0次或1次

\+ 匹配前面字符至少一次以上

\{n\} 匹配前面字符n次

\{m,n\} 匹配前面字符至少m次,至多n次

\{,n\} 匹配前面字符至多n次

\{n,\} 匹配前面字符至少n次

正则表达式涉及符号最好用引号引起来,不然有时会当作通配符用了

3288e3912871

image.png

这个当成通配符a* 搜索针对的是ls传递过来包含a的文件名

这个是正则表达式"a*" 搜索针对的是ls传递过来的内容

3、位子锚定

^ 以什么开头的行 ^root

math?formula=%E4%BB%A5%E4%BB%80%E4%B9%88%E7%BB%93%E5%B0%BE%E7%9A%84%E8%A1%8C%20bash

^$ 取空行

\< 词首以什么字符的行 \

\> 词尾以什么字符的行 r\>

\ 匹配单词 \

\ 转义符

4、分组

\(\) 将一个或多个字符当作一个整体取处理,这就需要用到分组 (root)

\| 或者 a\|b a或者b \(A\|a\)b Ab或ab

echo axx bxx cxx | grep “\(a\|b\|c\)xx”

\n 后项引用,调用前面第n个括号里的正则表达式

例如:\(a..b\).*\(x..y\).*\1.*\2* 所以:\1=\(a..b\) \2=\(x..y\)

练习-----常用案例

扫描网段在用的IP,使用-B的的场景用法

-sP:ping扫描,仅发现目标主机是否存活

nmap -v -sP 172.18..2.0/24 | grep -B1 up | grep report | cut -d" " -f5

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

搜索筛选两个关键字包含的行 是或的关系

grep -e root -e wang /etc/passwd

3288e3912871

image.png

判断主版本号

grep -o "[[:digit:]]+" /etc/centos-release |head -n1

3288e3912871

image.png

取函数名

grep -o "^[[:alnum:]_]+[[:space:]]*()" /etc/init.d/functions

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

函数都是在开头,需要牟定行首

3288e3912871

image.png

练习:

1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

grep "^[Ss]" /proc/meminfo

grep -i "^s" /proc/meminfo

3288e3912871

image.png

2、显示/etc/passwd文件中不以/bin/bash结尾的行

grep -v "/bin/bash$" /etc/passwd

3288e3912871

image.png

3、显示用户rpc默认的shell程序

grep "^rpc\>" /etc/passwd |cut -d: -f7

3288e3912871

image.png

4、找出/etc/passwd中的两位或三位数

grep -o "\b[0-9]{2,3\}\b" /etc/passwd

3288e3912871

image.png

3288e3912871

image.png

需要牟定词首词尾,否者这个也被匹配

3288e3912871

image.png

3288e3912871

image.png

5、显示CentOS7的/etc/grub.conf文件中,至少以一个空白字符开头的且后面存非空白字符的行

grep "^[[:space:]]\+[^[:space:]]" /etc/grub.conf

3288e3912871

image.png

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行

netstat -tna |grep "LISTEN[[:space:]]*$"

3288e3912871

image.png

7、显示CentOS7上所有系统用户的用户名和UID

cut -d: -f1,3 /etc/passwd |grep "\b[0-9]\{1,3\}$"

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

3288e3912871

image.png

8、找出/etc/passwd用户名同shell名的行

grep "^\(.*\):.*\

math?formula=%22%20%2Fetc%2Fpasswd%20grep%20%22%5E%5C%5C(.%5C*%5C%5C)%5C%5C%3E.%5C*%5C%5Cb%5C1" /etc/passwd

3288e3912871

image.png

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

df |grep "/dev/sd" |grep -o "\

3288e3912871

image.png

10、显示三个用户root、mage、wang的UID和默认shell

grep -o "^\(root\|mage\|wang\)\>" /etc/passwd|cut -d: -f3,7

3288e3912871

image.png

11、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

grep -o "^[[:alpha:]_]*()" /etc/rc.d/init.d/functions

3288e3912871

image.png

12、使用egrep取出/etc/rc.d/init.d/functions中其基名

echo "/etc/rc.d/init.d/functions" |egrep -o "[^/]+/?$" |egrep -o ".*[^/]"

3288e3912871

image.png

13、使用egrep取出上面路径的目录名

echo "/etc/rc.d/init.d/functions/" |egrep -o "^/./" |egrep -o ".[^/]"

3288e3912871

image.png

14、统计last命令中以root登录的每个主机IP地址登录次数

last | grep "^root" |tr -s " " -|cut -d- -f3 |sort| uniq -c

3288e3912871

image.png

15、显示ifconfig命令结果中所有IPv4地址

ifconfig ens33 |grep -o "([0-9]{1,3}.){3}[0-9]{1,3}" 点需要去转义

3288e3912871

image.png

精确匹配

ifconfig ens33 |egrep -o "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"

3288e3912871

image.png

16、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面

echo "welcome to magedu linux" | grep -o "[[:alpha:]]" |sort |uniq -c|sort -nr

3288e3912871

image.png

17、用正则表达式表示出QQ号

[1-2][0-9]\{10\}

18、用正则表达式表示手机号

^1[3-9][0-9]\{9\}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值