7、Linux命令之文本处理工具

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

一、文本的查看

1、cat -n 文件 加行号显示文本
-E 文件 显示回车符号
-A 文件 显示文本所有字符 $表示换行, ^I表示tab ,^M表示回车(一般win系统文本才有)
-s 文件 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v windos上文本文件 显示非打印”显示控制字符除了LFD和标签使用` ^”具有高位设置的符号和前面字符“m”
cat file1 file2 >file3 把两个文件合并一个文件

举例:


7、Linux命令之文本处理工具_第1张图片
image.png

-n用法


7、Linux命令之文本处理工具_第2张图片
image.png

-E用法
7、Linux命令之文本处理工具_第3张图片
image.png

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


7、Linux命令之文本处理工具_第4张图片
image.png

-s用法
7、Linux命令之文本处理工具_第5张图片
image.png

-v用法
这个可以和-A结合理解记忆
7、Linux命令之文本处理工具_第6张图片
image.png

用cat合并两个文件
7、Linux命令之文本处理工具_第7张图片
image.png

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


7、Linux命令之文本处理工具_第8张图片
image.png

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


7、Linux命令之文本处理工具_第9张图片
image.png

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


image.png

7、Linux命令之文本处理工具_第10张图片
image.png

按空格向下翻页查看

5、head -n 3 文件 显示文件前三行
-c 20 文件 显示头部20个字符


7、Linux命令之文本处理工具_第11张图片
image.png

6、tail -n3 文件 显示文件后三行
-f 文件 动态观察文件 用于观察日志文件,监控文件
-F 文件 和f一样,多了文件被删除,会有提示


7、Linux命令之文本处理工具_第12张图片
image.png

7、Linux命令之文本处理工具_第13张图片
image.png

7、Linux命令之文本处理工具_第14张图片
image.png

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

7、cut 取出特定列
cut -d: -f1,3 文件 以冒号为分隔符,取出内容第一和第三列
-d 指明分隔符 默认以tab为分隔符
--output-delimiter=" " 取出的列,以什么字符隔开
-f1 取第一列 混合使用:f1-3,7 第一列到第三列和第七列
-c 字符切割 一般列比较整齐的使用


7、Linux命令之文本处理工具_第15张图片
image.png

7、Linux命令之文本处理工具_第16张图片
image.png

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


7、Linux命令之文本处理工具_第17张图片
image.png
7、Linux命令之文本处理工具_第18张图片
image.png

练习------常用案例:
ss -nt | tr -s " " : | grep ESTAB | cut -d: -f6 取出和我对话的IP


7、Linux命令之文本处理工具_第19张图片
image.png

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


7、Linux命令之文本处理工具_第20张图片
image.png

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


7、Linux命令之文本处理工具_第21张图片
image.png

取当前主机指定网卡的IP:
ifconfig ens33 | grep netmask |tr -s " "| cut -d" " -f3 centos 7上


7、Linux命令之文本处理工具_第22张图片
image.png

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


7、Linux命令之文本处理工具_第23张图片
image.png

生成指定位数的随机口令:
cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
openssl rand -base64 30 | head -c30


7、Linux命令之文本处理工具_第24张图片
image.png

二、文本的统计-分析

1、wc 文件 显示文件有几行,几个单词,几个字节
-l 文件 只统计行
-w 文件 只统计单词
-c 文件 只统计字节
-m 文件 只统计字符 一个汉字是一个字符、三个字节
-L 文件 只统计最长行的长度

7、Linux命令之文本处理工具_第25张图片
image.png

7、Linux命令之文本处理工具_第26张图片
image.png

2、sort -nr -t: -k3 文件 取出以冒号分隔的第三列按数字反向排序
-n 按数字排序
-t 按什么分隔符
-k 哪一列排序
-r 反向排序
-u 删除输出重复行

7、Linux命令之文本处理工具_第27张图片
image.png

7、Linux命令之文本处理工具_第28张图片
image.png

3、uniq 文件 相邻一样的合并输出显示
-c 文件 显示合并的字符有几个同样的
-u 文件 只显示不重复的
-d 文件 只显示重复的


7、Linux命令之文本处理工具_第29张图片
image.png

练习------常用案例:
提取网站访问日志文件访问次数高的前十名
tr -s " "

7、Linux命令之文本处理工具_第30张图片
image.png

7、Linux命令之文本处理工具_第31张图片
image.png

7、Linux命令之文本处理工具_第32张图片
image.png

7、Linux命令之文本处理工具_第33张图片
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


7、Linux命令之文本处理工具_第34张图片
image.png

7、Linux命令之文本处理工具_第35张图片
image.png

7、Linux命令之文本处理工具_第36张图片
image.png

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

7、Linux命令之文本处理工具_第37张图片
image.png

通过差异存档,可以恢复删掉的文件
diff f3 f4 -u >f8
rm f4
patch -b f3 f8
注意:系统没有装patch命令的包,需要取手动装一下
恢复的文件f4,会覆盖了f3,f3内容是原f4内容,原f3会生成一个备份文件

7、Linux命令之文本处理工具_第38张图片
image.png

image.png

7、Linux命令之文本处理工具_第39张图片
image.png

7、Linux命令之文本处理工具_第40张图片
image.png

三、文本处理三剑客

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

1、grep 行搜索并筛选
egrep=grep -E
fgrep=grep -F

grep 关键字 文件或目录
关键字可以是字符,可以是命令(用反向单引号扣起来命令),也可以引用变量(用双引号括起来或者不用)
-v 反选包含关键字以外的行

7、Linux命令之文本处理工具_第41张图片
image.png

-i 忽略关键字大小写


7、Linux命令之文本处理工具_第42张图片
image.png

-n 显示包括关键字的行以及行号
-c 匹配到关键字的行,有几行


7、Linux命令之文本处理工具_第43张图片
image.png

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


image.png

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


7、Linux命令之文本处理工具_第44张图片
image.png

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


7、Linux命令之文本处理工具_第45张图片
image.png

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


7、Linux命令之文本处理工具_第46张图片
image.png

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


7、Linux命令之文本处理工具_第47张图片
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次

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

7、Linux命令之文本处理工具_第48张图片
image.png

这个当成通配符a* 搜索针对的是ls传递过来包含a的文件名
这个是正则表达式"a*" 搜索针对的是ls传递过来的内容

3、位子锚定
^ 以什么开头的行 ^root
$ 以什么结尾的行 bash$
^$ 取空行
\< 词首以什么字符的行 \ \> 词尾以什么字符的行 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


7、Linux命令之文本处理工具_第49张图片
image.png

7、Linux命令之文本处理工具_第50张图片
image.png

7、Linux命令之文本处理工具_第51张图片
image.png

7、Linux命令之文本处理工具_第52张图片
image.png

搜索筛选两个关键字包含的行 是或的关系
grep -e root -e wang /etc/passwd


7、Linux命令之文本处理工具_第53张图片
image.png

判断主版本号
grep -o "[[:digit:]]+" /etc/centos-release |head -n1


7、Linux命令之文本处理工具_第54张图片
image.png

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


7、Linux命令之文本处理工具_第55张图片
image.png

7、Linux命令之文本处理工具_第56张图片
image.png

7、Linux命令之文本处理工具_第57张图片
image.png

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


7、Linux命令之文本处理工具_第58张图片
image.png

练习:
1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
grep "^[Ss]" /proc/meminfo
grep -i "^s" /proc/meminfo


7、Linux命令之文本处理工具_第59张图片
image.png

2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v "/bin/bash$" /etc/passwd


7、Linux命令之文本处理工具_第60张图片
image.png

3、显示用户rpc默认的shell程序
grep "^rpc\>" /etc/passwd |cut -d: -f7


7、Linux命令之文本处理工具_第61张图片
image.png

4、找出/etc/passwd中的两位或三位数
grep -o "\b[0-9]{2,3\}\b" /etc/passwd


7、Linux命令之文本处理工具_第62张图片
image.png

7、Linux命令之文本处理工具_第63张图片
image.png

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


image.png

7、Linux命令之文本处理工具_第64张图片
image.png

5、显示CentOS7的/etc/grub.conf文件中,至少以一个空白字符开头的且后面存非空白字符的行
grep "^[[:space:]]\+[^[:space:]]" /etc/grub.conf


7、Linux命令之文本处理工具_第65张图片
image.png

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行
netstat -tna |grep "LISTEN[[:space:]]*$"


7、Linux命令之文本处理工具_第66张图片
image.png

7、显示CentOS7上所有系统用户的用户名和UID
cut -d: -f1,3 /etc/passwd |grep "\b[0-9]\{1,3\}$"


7、Linux命令之文本处理工具_第67张图片
image.png

image.png

7、Linux命令之文本处理工具_第68张图片
image.png

7、Linux命令之文本处理工具_第69张图片
image.png

8、找出/etc/passwd用户名同shell名的行
grep "^\(.*\):.*\<\1$" /etc/passwd
grep "^\(.*\)\>.*\b\1$" /etc/passwd


7、Linux命令之文本处理工具_第70张图片
image.png

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
df |grep "/dev/sd" |grep -o "\<[[:digit:]]\{1,3\}%" |grep -o "[[:digit:]]\{1,3\}" |sort -nr


7、Linux命令之文本处理工具_第71张图片
image.png

10、显示三个用户root、mage、wang的UID和默认shell
grep -o "^\(root\|mage\|wang\)\>" /etc/passwd|cut -d: -f3,7


7、Linux命令之文本处理工具_第72张图片
image.png

11、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
grep -o "^[[:alpha:]_]*()" /etc/rc.d/init.d/functions


7、Linux命令之文本处理工具_第73张图片
image.png

12、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo "/etc/rc.d/init.d/functions" |egrep -o "[^/]+/?$" |egrep -o ".*[^/]"


7、Linux命令之文本处理工具_第74张图片
image.png

13、使用egrep取出上面路径的目录名
echo "/etc/rc.d/init.d/functions/" |egrep -o "^/./" |egrep -o ".[^/]"

image.png

14、统计last命令中以root登录的每个主机IP地址登录次数
last | grep "^root" |tr -s " " -|cut -d- -f3 |sort| uniq -c


7、Linux命令之文本处理工具_第75张图片
image.png

15、显示ifconfig命令结果中所有IPv4地址
ifconfig ens33 |grep -o "([0-9]{1,3}.){3}[0-9]{1,3}" 点需要去转义


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])"


image.png

16、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
echo "welcome to magedu linux" | grep -o "[[:alpha:]]" |sort |uniq -c|sort -nr


7、Linux命令之文本处理工具_第76张图片
image.png

17、用正则表达式表示出QQ号
[1-2][0-9]\{10\}
18、用正则表达式表示手机号
^1[3-9][0-9]\{9\}$

你可能感兴趣的:(7、Linux命令之文本处理工具)