码迷,mamicode.com
首页 > 其他好文 > 详细

文本处理小公举(cut,sort,uniq,head,tail,tr,wc,diff)

时间:2016-08-25 22:03:20      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:wc   sort   cut   diff   

tr

作用:可搭配集对应字符对字符的转换和删除

集对应字符

[:alnum:]:字母和数字

[:alpha:]:字母

[:cntrl:]:控制(非打印)字符

[:digit:]:数字

[:graph:]:图形字符

[:lower:]:小写字母

[:print:]:可打印字符

[:punct:]:标点符号

[:space:]:空白字符

[:upper:]:大写字母

[:xdigit:]:十六进制字符


#语法:
tr [OPTION]... SET1 [SET2]
#选项
-c或——complerment:取字符集的补集
-d或——delete:删除所有属于第一字符集的字符
-s或—squeeze-repeats:把连续重复的字符以单独一个字符表示
-t或--truncate-set1:将第一个字符集对应字符转化为第二字符

#例子

#1.将输出大写字母替换成小写
[root@localhost ~]# echo "LIAOXZ"|tr -t "[[:upper:]]" "[[:lower:]]"
liaoxz
#2.删除文件中的空格
[root@localhost ~]# cat /etc/issue
\S
Kernel \r on an \m

[root@localhost ~]# cat /etc/issue|tr -d " "
\S
Kernel\ronan\m
#3.将/root/下文件列表,显示成一行,并文件名之间用空格隔开
[root@localhost ~]# ls /root/ |tr "[[:space:]]" " " 
1 1.sh 1.txt 2.sh anaconda-ks.cfg bin dead.letter Desktop Documents Downloads install.log 
install.log.syslog liaoxz ll LL mbr Music Pictures ping.sh Public Templates Videos 
#4.处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格
[root@localhost ~]# echo "xt.,l 1 jr#" "mn2 c*/fe3 uz4"|tr -d "[[:alpha:]]"|tr -d "[[:punct:]]"
 1  2 3 4
#5.删除文件1中的所有重复字母
[root@localhost ~]# cat 1
wwwwwsss
wwdsss
aaaasddqqaxs


[root@localhost ~]# cat 1|tr -s w
wsss
wdsss
aaaasddqqaxs


[root@localhost ~]# cat 1|tr -s ws
ws
wds
aaaasddqqaxs


[root@localhost ~]# cat 1|tr -s wsa
ws
wds
asddqqaxs


[root@localhost ~]# cat 1|tr -s wsad
ws
wds
asdqqaxs


[root@localhost ~]# cat 1|tr -s wsadq
ws
wds
asdqaxs
#6.处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字
[root@localhost ~]# echo "xt.,l 1 jr#$tttmn2 c*/fe3 uz4"|tr -d -c "[[:digit:]]\n"
134

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

[head|tail]

   文件截取小工具

    head  显示文本前几行 在默认情况下,head命令显示文件的头10行内容。

#语法
head [OPTION]... [FILE]...
#选项
-n<数字>:指定显示头部内容的行数;
-c<字符数>:指定显示头部内容的字符数; 
-v:总是显示文件名的头信息; 
-q:不显示文件名的头信息。
#例子
1.显示/etc/passwd文件前5行
[root@localhost ~]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2.显示文件/etc/passwd头行第一个字符
[root@localhost ~]# head -c1 /etc/passwd
r


  tail 显示文本后几行 不加选项默认为10行

#语法
tail [OPTION]... [FILE]...
#选项
--retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。
使用此选项时需要与选项“——follow=name”连用; 
-c或——bytes=:输出文件尾部的N(N为整数)个字节内容; 
-f或;--follow:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与
“-fdescriptor”等效; 
-F:与选项“-follow=name”和“--retry"连用时功能相同; 
-n或——line=:输出文件的尾部N(N位数字)行内容。 --pid=<进程号>:与“-f”选项连用,当指定
的进程号的进程终止后,自动退出tail命令; 
-q或——quiet或——silent:当有多个文件参数时,不输出各个文件名; 
-s<秒数>或——sleep-interal=<秒数>:与“-f”选项连用,指定监视文件变化时间隔的秒数; 
-v或——verbose:当有多个文件参数时,总是输出各个文件名; --help:显示指令的帮助信息; 
--version:显示指令的版本信息。
#例子
1.显示文件/etc/passwd最后3行内容
[root@localhost ~]# tail -3 /etc/passwd
userlist.file:x:1003:1003::/home/userlist.file:/bin/bash
lll:x:1004:1004::/home/lll:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
2.监控文件1的写入情况

#如下图


技术分享

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

cut

  可以对文件按列抽取需要的内容

#语法
cut OPTION... [FILE]...
#选项
-b:仅显示行中指定直接范围的内容; 
-c:仅显示行中指定范围的字符; 
-d:指定字段的分隔符,默认的字段分隔符为“TAB”; 
-f:显示指定字段的内容; 
-n:与“-b”选项连用,不分割多字节字符; 
--complement:补足被选择的字节、字符或字段; 
--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符; 

#例子
1.显示root用户名和登录shell
[root@localhost ~]# cut -d: -f1,7 /etc/passwd|grep root
root:/bin/bash
#grep用法参考博客:
#2.查看/etc/issue每一列第一个字符

 [root@localhost etc]# cat /etc/issue
\S
Kernel \r on an \m

[root@localhost etc]# cat /etc/issue|cut -c 1
K

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

wc

  收集文本统计信息,可以计算文件的Byte数、字数或是列数等

#语法
wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F
选项
-c或--bytes或——chars:只显示Bytes数; 
-l或——lines:只显示列数; 
-w或——words:只显示单词字数;
-m或--chars  :只显示字符总数。
#例子
显示文件/etc/issue列数和单词字数

[root@localhost etc]# cat /etc/issue|wc -w
6
#单词数
[root@localhost etc]# cat /etc/issue|wc -l
3
#列数

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

sort

  文件排序工具,只输出不改变文件内容

#语法
sort [OPTION]... [FILE]...
-b:忽略每行前面开始出的空格字符; 
-c:检查文件是否已经按照顺序排序; 
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符; 
-f:排序时,将小写字母视为大写字母; 
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符; 
-m:将几个排序号的文件进行合并; 
-M:将前面3个字母依照月份的缩写进行排序;
-k X 选项按照使用c字符分隔的X列来整理能够使用多次可以与-t搭配来用;
-n:依照数值的大小排序; 
-o<输出文件>:将排序后的结果存入制定的文件; 
-r:以相反的顺序来排序; 
-t<分隔字符>:指定排序时所用的栏位分隔字符; 
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
#例子
#1.查出用户UID最大值的用户名、UID及shell类型
[root@localhost etc]# cat passwd |sort -s -n -t: -k3 |tail -1|cut -d: -f1,3,7
nfsnobody:65534:/sbin/nologin
#2.查出用户UID最小值的用户名、UID及shell类型
[root@localhost etc]# cat passwd |sort -s -n -t: -k3 |head -1|cut -d: -f1,3,7
root:0:/bin/bash
#3.截取出/tmp/目录下所有文件的权限,删除文件类型和文件权限一样项
[root@localhost etc]# ll  /tmp|cut -d. -f1|sort
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwx------
drwxr-xr-x
drwxr-xr-x
prw-------
-rw-------
-rw-r--r--
total 72

[root@localhost etc]# ll  /tmp|cut -d. -f1|sort -u
drwx------
drwxr-xr-x
prw-------
-rw-------
-rw-r--r--
total 72

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

uniq

 报告或忽略文件中的重复行,一般与sort命令结合使用

#语法
uniq [OPTION]... [INPUT [OUTPUT]]
#选项
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
#ps:连续且完全相同方为重复
#例子
#显示当前每个远程连接主机ip数
[root@localhost ~]# who |tr -s " "|cut -d " " -f5|sed "/^$/d"|sed "/(:0)/d"|uniq -c
      4 (10.1.250.31)
      2 (10.1.252.216)

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

diff

  是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作

#语法
diff [OPTION]... FILES
#选项
-<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用; 
-a或——text:diff预设只会逐行比较文本文件; 
-b或--ignore-space-change:不检查空格字符的不同; 
-B或--ignore-blank-lines:不检查空白行; 
-c:显示全部内容,并标出不同之处; 
-C<行数>或--context<行数>:与执行“-c-<行数>”指令相同; 
-d或——minimal:使用不同的演算法,以小的单位来做比较; 
-D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集; 
-e或——ed:此参数的输出格式可用于ed的script文件; 
-f或-forward-ed:输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处; 
-H或--speed-large-files:比较大文件时,可加快速度; 
-l<字符或字符串>或--ignore-matching-lines<字符或字符串>:若两个文件在某几行有所不同,而之际
航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异; 
-i或--ignore-case:不检查大小写的不同; 
-l或——paginate:将结果交由pr程序来分页; 
-n或——rcs:将比较结果以RCS的格式来显示; 
-N或--new-file:在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录,文件A 若
使用-N参数,则diff会将文件A 与一个空白的文件比较; 
-p:若比较的文件为C语言的程序码文件时,显示差异所在的函数名称; 
-P或--unidirectional-new-file:与-N类似,但只有当第二个目录包含了第一个目录所没有的文件时,
才会将这个文件与空白的文件做比较; 
-q或--brief:仅显示有无差异,不显示详细的信息; 
-r或——recursive:比较子目录中的文件; 
-s或--report-identical-files:若没有发现任何差异,仍然显示信息; 
-S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较; 
-t或--expand-tabs:在输出时,将tab字符展开; 
-T或--initial-tab:在每行前面加上tab字符以便对齐; 
-u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同; 
-v或——version:显示版本信息; 
-w或--ignore-all-space:忽略全部的空格字符; 
-W<宽度>或--width<宽度>:在使用-y参数时,指定栏宽; 
-x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录; 
#例子
#比较httpd.conf文件和httpdbak.conf的 不同
[root@localhost conf]# diff httpd.conf httpdbak.conf 
41c41
< Listen 8080
---
> Listen 80

ps:本文许多命令选项来自于:http://man.linuxde.net/

本文出自 “笔记” 博客,请务必保留此出处http://snowbamboo1.blog.51cto.com/9291858/1842635

文本处理小公举(cut,sort,uniq,head,tail,tr,wc,diff)

标签:wc   sort   cut   diff   

原文地址:http://snowbamboo1.blog.51cto.com/9291858/1842635

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!