Linux云计算基础篇(9)-文本处理工具和变量
1.文本提取工具
提取列或者字段:cut
P: cut会将内容输出到终端,默认不会对源文件进行修改
语法格式:
cut [选项] file
常用选项:
-d
指定分隔符-d_f
指定要打印的列-C
根据字符提取内容
cut使用案例
- 提取系统的所有用户名
[root@localhost ~]# cut -d: -f1 /etc/passwd #以:为分隔符,提取第一列 root bin
- 提取指定数量的字符
[root@localhost ~]# cut -c1-2 /etc/passwd # 提取/etc/passwd文件第1个到第2个字符
2.文本分析工具-文本统计
统计单词数、行数、字节大小:wc
语法格式:
wc [选项] file
常用选项:
-w
统计文件的单词数-C
统计文件的字符数-l
统计文件的行数
使用wc命令的案例:
- 统计系统中所有的用户
[root@localhost ~]# wc -l /etc/passwd 47 /etc/passwd # /etc/passwd一行都是一个用户,共有47行说明有47个用户
- 提取/etc/passwd文件第1个到第2个字符
[root@localhost ~]# cut -c1-2 /etc/passwd
3.文本分析工具-文本排序
对文本进行排序的工具:sort
(同时支持删除重复的行)
排序的结果输出到终端页面,对源文件不会修改
语法格式:
sort [选项] file
常用选项:
-r
降序-n
根据数字进行排序-f
忽略字符的大小写-tc
以c为分隔符-kx
(和-c联合使用) 以c作为分隔符,根据第x列排序-U
删除重复的行
4.文本分析工具-文本比较
文本比较工具:diff、vimdiff
- diff命令: 在终端上显示文件之间的差异性
[root@localhost opt]# diff /etc/passwd /opt/passwd 1d0 < root:x:0:0:root:/root:/bin/bash
- vimdiff命令: 在多窗口模式下比较文件
5.文本分析工具-文本转换
文本转换工具:tr
可以将大小写字母互相转换,也可以将字母和数字互相转换
只能通过STDIN读取内容
使用案例如下图:
[root@localhost ~]# cat /opt/passwd
root123
[root@localhost ~]# tr 'a-z' '0-9' < /opt/passwd
9999123
6.文本分析工具-文本编辑
文本编辑工具sed(流编辑器)
查找替换、删除、追加等操作在文本流上,无需交互式操作
默认不修改源文件内容
一次处理一行内容
处理内容的时候先放入缓冲区,即模式空间,经过sed处理后再输出到终端
语法格式:
sed [选项] file
常用选项:
-n
不输出模式空间的内容-i
对源文件进行操作(默认不会修改源文件)-i.bak
先备份源文件,再修改内容-e
可以使用多个命令来进行操作-r
使用扩展正则(sed默认支持基本正则)
7.sed流编辑器地址定界
地址定界: 指定sed对文件要处理的行;如果不指定,则默认处理所有行
#
:#
为数字,指定要进行处理操作的行$
:表示最后一行,多个文件进行操作的时候,为最后一个文件的最后一行/regexp/
:表示能够被regexp匹配到的行,regexp即基于正则表达式的匹配/regexp/I
:匹配时忽略大小写\%regexp%
:任何能够被regexp匹配到的行,换用%用其他字符也可以,如:#为边界符号addr1,addr2
:指定范围内的所有的行(范围选定)first~step
:指定起始的位置及步长,例如:1~2
表示1,3,5...addr1,+N
:指定行以及以后的N行addr1,~N
:指定行开始的N行
8.sed流编辑器-案例1
示例:
sed -n 5p passwd
打印第5行sed -n $p passwd
打印最后一行sed -n '1,5p' passwd
打印第1-5行sed -n '/root/Ip' passwd
匹配带有root关键词的行,并忽略大小写sed -n '\%root%Ip' passwd
同上sed '1,5d' passwd
删除第1-5行sed -i.bak '1,5d' passwd
删除第1-5行,源文件被修改sed '2a \abc' passwd
在文件第2行下面追加abc
9.案例2
sed 's/north/hello/' datafile
替换每行第一个northsed 's/north/hello/g' datafile
全部替换sed '1 s/north/hello/g' datafile
替换第一行所有的northsed '1 s/north/hello/' datafile
替换第一行第一个northsed '1 s/north/hello/2' datafile
只替换第一行第二个north
10.巧用替换删除内容(不是删除行)
sed 's/north//' datafile
删除所有行的第一个northsed 's/north//g' datafile
删除全部的northsed '1 s/north//2' datafile
删除第一行第二个sed 's/^/#/' datafile
给每行开始加注释,^
就代表开始sed 's/^.//' datafile
删除每行第一个字母sed 's/^\(..\)./\1/' datafile
删除第3个字母
注释:\1
代表第一个括号匹配到的内容sed 's/^\<[a-Z]*[a-Z]\>//' datafile
删除每行第一个单词