文本处理

xiaoxiao2021-02-28  167

文本处理

1.文本处理工具:

1 文件内容:less和 cat 2 文件截取:head和tail 3 按列抽取:cut 4 按关键字抽取:grep

2.文本查看

文件查看命令:cat tac rev cat -v 显示非打印字符 -E 显示$ -T 显示TAB -n 显示行号 -s 将连续的重复行变成一行 -A = -vET

Tac Rev rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。

3.分页查看文件内容

 more: 分页查看文件 more [OPTIONS…] FILE… -d: 显示翻页及退出提示  less:一页一页地查看文件或STDIN输出 查看时有用的命令包括: /文本 搜索 文本 n/N 跳到下一个 或 上一个匹配 less 命令是man命令使用的分页器

4显示文本前或后行内容

e:文件内容显示完毕后,自动退出; -f:强制显示文件; -g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度; -l:搜索时忽略大小写的差异; -N:每一行行首显示行号; -s:将连续多个空行压缩成一行显示; -S:在单行显示较长的内容,而不换行显示; -x<数字>:将TAB字符显示为指定个数的空格字符 head -n 行号 显示前n行 -行号 显示前n行 -c 字节数 显示前n个字节

tail -n 行号 显示后n行 -行号 显示后n行 -c 字节数 显示后n个字节 -f 动态显示 head Head - c Tail –n Tail -2 Tail –c Tail –f

显示实时信息

练习: 显示/etc/passwd文件的第11行至第20行 head -n 20 /etc/passwd |tail -11 利用 cat /dev/urandom 生成10位字符长度的随机密码(包含大小写字母及数字) cat /dev/urandom | tr -d -c ‘[:alnum:][:punct:]’ | head -c 10 ;echo

5按列抽取文本cut和合并文件paste

5.1cut [OPTION]… [FILE]…

d DELIMITER: 指明分隔符,默认tab -f FILEDS:

1.#第#个字段 2.#,#[,#]:离散的多个字段,例如1,3,6 #-# 3.连续的多个字段, 例如1-6 混合使用:1-3,7 -c 按字符切割 –output-delimiter=STRING指定输出分隔符

例如:

1查看 /etc/passwd 的第一列 [root@localhost app]# cut -d: -f 1 /etc/passwd 2查看 /etc/passwd 的用户名和UID 3查看 /etc/passwd 的用户名到UID的信息 4.换输出的单引号

练习

1.显示当前主机第一个网卡的IP地址 ifconfig |head -n 2| tail -n 1| tr -s ’ ’ : |cut -d: -f4

2.查出/app目录的空间使用量 df|tr -s [[:space:]]|head -n 4|tail -n 1|cut -d ’ ’ -f5|cut -d ‘%’ -f1 df|tr -s ” ” % |head -n 4 |tail -n 1 |cut -d% -f5 df |head -n 8 |tail -n 1 |cut -c 44-46 3.利用 cat /dev/urandom 生成10位字符长度的随机密码(包含大小写字母及数字) cat /dev/urandom | tr -d -c ‘[:alnum:][:punct:]’ | head -c 10 ;echo (大小写字母数字特殊号) -d 指定分隔符 -f 选取第几列 n n-r n,n-r –output-delimiter 指定输出符

cut -d: -f1,3 --output-delimiter='|' /etc/passwd

 显示文件或STDIN数据的指定列 cut -d: -f1 /etc/passwd cat /etc/passwd | cut -d: -f7 cut -c2-5 /usr/share/dict/words

5.2.paste 合并两个文件同行号的列到一行

paste [OPTION]… [FILE]… -d 分隔符:指定分隔符,默认用TAB -s : 所有行合成一行显示

paste f1 f2 paste -s f1 f2 5分析文本的工具  文本数据统计:wc  整理文本:sort  比较文件:diff和patch

5.3收集文本统计数据wc

 计数单词总数、行总数、字节总数和字符总数  可以对文件或STDIN中的数据运行 $ wc story.txt 39 237 1901 story.txt 行数 字数 字符数  使用 -l 来只计数行数  使用 -w 来只计数单词总数  使用 -c 来只计数字节总数 使用 -m 来只计数字符总数

6文本排序sort

 把整理过的文本显示在STDOUT,不改变原始文件 $ sort [options] file(s)  常用选项  -r 执行反方向(由上至下)整理  -n 执行按数字大小整理  -f 选项忽略(fold)字符串中的字符大小写  -u 选项(独特,unique)删除输出中的重复行  -t c 选项使用c做为字段界定符  -k X 选项按照使用c字符分隔的X列来整理能够使用多次

7.uniq

 uniq命令:从输入中删除前后相接的重复的行  uniq [OPTION]… [FILE]… -c: 显示每行重复出现的次数 -d: 仅显示重复过的行 -u: 仅显示不曾重复的行 连续且完全相同方为重复  常和sort 命令一起配合使用: sort userlist.txt | uniq -c Uniq -d

8.比较文件

 比较两个文件之间的区别 difffoo.confbrokenfoo.confworks5c5<usewidgets=no>usewidgets=yes5patchdiff使uunifieddiffpatch使b diff -u foo.conf-broken foo.conf-works > foo.patch $ patch -b foo.conf-broken foo.patch

补丁

Patch

有centos7,生成的补丁导入centos6里,实例:

练习  1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址 [root@localhost ~]# ifconfig |head -2|tail -1|tr -s ” ” :|cut -d: -f3  2、查出分区空间使用率的最大百分比值 [root@localhost ~]# df|tr -s ’ ’ %|sort -t% -k5 -n|tail -1|cut -d% -f5  3、查出用户UID最大值的用户名、UID及shell类型 cat /etc/passwd |cut -d: -f1,3,7|sort -n -t : -k 2|tail -n 1  4、查出/tmp的权限,以数字方式显示 [root@localhost ~]# stat /tmp |head -4|tail -1|cut -d/ -f1|cut -d’(’ -f2 1777 [root@localhost ~]# stat -c %a /tmp/ 1777

 5、统计当前连接本机的每个远程主机IP的连接数,并按从大 到小排序 [root@localhost ~]# netstat -tun|grep ESTAB|tr -s ’ ’ :|cut -d: -f6|sort -nr|uniq -c

9正则表达式

Grep 1、作用: 文本搜索工具,根据用户指定的“模式”对目标文 本逐行进行匹配检查;打印匹配到的行 2,模式: 由正则表达式字符及文本字符所编写的过滤条件 1.命令格式: grep [option] pattern file grep root /etc/passwd grep “ USER/etc/passwdgrep USER’ /etc/passwd grep whoami /etc/passwd 3,grep命令选项及功能 –color=auto: 对匹配到的文本着色显示  -v: 显示不被pattern匹配到的行  -i: 忽略字符大小写  -n:显示匹配的行号  -c: 统计匹配的行数  -o: 仅显示匹配到的字符串  -q: 静默模式,不输出任何信息  -A #: after, 后#行  -B #: before, 前#行  -C #:context, 前后各#行  -e:实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file  -w:匹配整个单词  -E:使用ERE  -F:相当于fgrep,不支持正则表达式

实例: 1.调用变量和命令执行的结果 2.grep –color=auto: 对匹配到的文本着色显示

2.5 grep -v 显示不被pattern匹配到的行

3grep -i 忽略大小写

4 grep -n 显示行号 5 grep -c 行数 6.grep -o 显示匹配的字符串 7.grep -q 静默模式,不输出任何信息 Ping grep:

8 Grep -A/B显示搜索内容的前三行和后三行

Grep-c 2 显示前2行和后2行

9 grep -e 关键字1 -e 关键字2 实现多个选项间的逻辑or关系

10 grep -w 匹配整个单词

10.规则表达式:

分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep -E, egrep  正则表达式引擎: 采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions)  元字符分类:字符匹配、匹配次数、位置锚定、分组  man 7 regex

grep 的规则表达式: 字符匹配 . #匹配单个字符,如 ‘gr.p’ 匹配gr 后接一个任意字符,然后是 P. []  #匹配一个指定范围内的字符,如 ‘[Gg]rep’匹配 Grep 和grep 。 ???[^] #匹配一个不在指定范围内的字符,如 ‘[^A-FH-Z]rep’ 匹配不包含A-R和 T-Z的一个字母开头,紧跟 rep 的行。 [:alnum:]  字母和数字 [:alpha:]   英文大小EP写,A-Z,a-z [:digit:]   十进制数字字符 [:xdigit:]十六进制数字(0-9,a-f,A-F)R [:graph:]   非空白字符(非空格、控制字符) [:blank:] 空白字符(空格和制表符) [:lower:]    小写字符 a-z [:upper:]    大写字符 = A-Z [:cntrl:]    控制字符 (退格,删除,响铃。。。) [:print:]    可打印的字符(包括空格) [:punct:]    标点符号 [:space:]    所有空白字符(新行,空格,制表符) 1 grep . 2 grep [] 3.grep [^] 4.

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数 * 匹配前面的字符任意次,包括0次 如 ‘*grep ’ 匹配所有一个或多个空格后紧跟 grep 的行。 贪婪模式:尽可能长的匹配 .* 任意长度的任意字符 \? 匹配其前面的字符0或1次 + 匹配其前面的字符至少1次 x{m}  #重复字符x,m 次,如 ‘0{5}’匹配包含5个0的行。 x{m,}  #重复字符x,至少m次,如 ‘o{5,}’ 匹配至少有5个o 的行。 x{m,n}  #重复字符x,至少m次,不多于n次,如 ‘o{5,10}’匹配5–10个o的行。 {,n} 匹配前面的字符至多n次 1 2.grep x{m}  3.x{m,n}  位置锚定:定位出现的位置 1 2 3  分组:() 将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:(root)+

 分组括号中的模式匹配到的内容会被正则表达式引擎记录于 内部的变量中,这些变量的命名方式为: \1, \2, \3, …  \1 表示从左侧起第一个左括号以及与之匹配右括号之间的 模式所匹配到的字符  示例: (string1+(string2)*) \1 :string1+(string2)* \2 :string2  后向引用:引用前面的分组括号中的模式所匹配字符,而非 模式本身  或者:| 示例:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat 实例: 1 2 3 4 5 6

5.POSIX字符: 为了在不同国家的字符编码中保持一至,POSIX(the portable operating system interface )增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。 要把它们放到[]号内才能成为正则表达式,如[A-Za-z0-9] 或[[:alnum:]]。在Linux下的grep 除fgrep 外,都支持 POSIX的字符类。 练习:  1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两 种方法) cat /proc/meminfo|grep “^[Ss]” cat /proc/meminfo|grep -i “^s” cat /proc/meminfo|grep -e ^s -e ^S cat /proc/meminfo|grep “^s|^S” cat /proc/meminfo|grep “^[s|S]”  2、显示/etc/passwd文件中不以/bin/bash结尾的行 [root@localhost ~]# cat /etc/passwd|grep -v “/bin/bash\b” [root@localhost ~]# grep -v “/bin/bash$” /etc/passwd  3、显示用户rpc默认的shell程序 [root@localhost ~]# grep “rpc>” /etc/passwd|cut -d: -f7 [root@localhost ~]# grep -w “rpc” /etc/passwd|cut -d: -f7  4、找出/etc/passwd中的两位或三位数 [root@localhost ~]# grep “\<[0-9]{2,3}>” /etc/passwd  5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白 字符开头的且后面存非空白字符的行 [root@localhost ~]# cat /etc/grub2.cfg|grep “^[[:space:]+ [^[:space:]]”

转载请注明原文地址: https://www.6miu.com/read-18358.html

最新回复(0)