文本处理
文件查看命令:cat tac rev cat -v 显示非打印字符 -E 显示$ -T 显示TAB -n 显示行号 -s 将连续的重复行变成一行 -A = -vET
Tac Rev rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。
more: 分页查看文件 more [OPTIONS…] FILE… -d: 显示翻页及退出提示 less:一页一页地查看文件或STDIN输出 查看时有用的命令包括: /文本 搜索 文本 n/N 跳到下一个 或 上一个匹配 less 命令是man命令使用的分页器
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
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
paste [OPTION]… [FILE]… -d 分隔符:指定分隔符,默认用TAB -s : 所有行合成一行显示
paste f1 f2 paste -s f1 f2 5分析文本的工具 文本数据统计:wc 整理文本:sort 比较文件:diff和patch
计数单词总数、行总数、字节总数和字符总数 可以对文件或STDIN中的数据运行 $ wc story.txt 39 237 1901 story.txt 行数 字数 字符数 使用 -l 来只计数行数 使用 -w 来只计数单词总数 使用 -c 来只计数字节总数 使用 -m 来只计数字符总数
把整理过的文本显示在STDOUT,不改变原始文件 $ sort [options] file(s) 常用选项 -r 执行反方向(由上至下)整理 -n 执行按数字大小整理 -f 选项忽略(fold)字符串中的字符大小写 -u 选项(独特,unique)删除输出中的重复行 -t c 选项使用c做为字段界定符 -k X 选项按照使用c字符分隔的X列来整理能够使用多次
uniq命令:从输入中删除前后相接的重复的行 uniq [OPTION]… [FILE]… -c: 显示每行重复出现的次数 -d: 仅显示重复过的行 -u: 仅显示不曾重复的行 连续且完全相同方为重复 常和sort 命令一起配合使用: sort userlist.txt | uniq -c Uniq -d
比较两个文件之间的区别 difffoo.conf−brokenfoo.conf−works5c5<usewidgets=no—>usewidgets=yes注明第5行有区别(改变)复制对文件改变patchdiff命令的输出被保存在一种叫做“补丁”的文件中使用−u选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件。patch复制在其它文件中进行的改变(要谨慎使用)适用−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
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 匹配整个单词
分两类: 基本正则表达式: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:]]”