tr、wc、uniq、grep、diff

来源:互联网 发布:剑灵热巴数据 编辑:程序博客网 时间:2024/06/10 01:05

字符转换

tr 的作用一:替换(不改变源文件)

作用:字符转换工具
只能对stdin操作,不能直接对文件操作
格式: tr set1 set2 (同一位置set2替换set1)
例① 普通的替换

# echo 123456123456|tr 345 abc12abc612abc6

例② 在文本里的替换

# tr heze jinan < fuxingkai.txt fuxingkai njongyiyangjanalaarning linux

所以,并不能单词替换单词,仅仅是单个字符的一一对应替换!

例③ [ ]中括号表示范围的替换

# tr [a-z] [A-Z] <fuxingkai.txt FUXINGKAI ZHONGYIYANGHEZELEARNING LINUX

例④:

# tr    ':'   '\n' <fuxingkai.txt 将文件中的:全部替换为换行

tr的作用二:删除

tr -d  [0:9]  删除09的数字    tr -d  ‘%’    删除%字符

tr的作用三:压缩(去重)

tr -s  SET        将连续相同的字符压缩成一个字符# echo "1   2   3  4"|tr -s ' '  '\t'1    2    3    4(\t  代表制表符)

单引号和双引号的不同

  • 单引号:输出纯字符,特殊符号失去作用;
  • 双引号:元字符可以有特殊含义。
# meinv=qianqian    ---定义变量meinv,赋值qianqian# echo "$meinv"     ---输出meimv的值qianqian# echo '$meinv'     ---输出$meinv$meinv

$ 元字符:能代表其他含义的字符,有特殊含义的字符,并不是代表本身字符的含义。


sort命令(不改变源文件)

作用:排序。默认按每行的第一个字符排序。

  • -n:按数值大小进行排序;
  • -r:递减排序(整行整行的处理) reverse;
  • -k 3 指定第三列为排序键;
  • -t: 指定字段分割符(默认分隔符是空白(空格、Tab))。

PS:
sort排序是按照行来排序的,可以理解为一行是一个整体!!


uniq命令

数据的实例统计。
作用:删除经过排序后的数据的重复记录。通常和sort连用。sort -n 文件 | uniq

  • -c:统计特定记录出现的次数;
  • -u:只显示唯一的行;
  • -d:只显示重复的行。
# cat access_log |awk '{print $1}'|sort |uniq -c|sort  -nr|head -3  ---只取第一列    666 172.16.68.155    648 172.16.70.199    490 172.16.88.88

cut命令(截取)

从文本文件或者文本流中提取文本列
格式:cut -选项 提取范围 文本文件常见选项

  • -c:从指定提取范围中提取字符;
  • -f:从指定提取范围中提取字段(=列);
  • -d:指定分隔符默认是Tab。
#cut -d “:” -f 1,7 /etc/passwd#who | cut  -d ' '  -f1,6          提取范围
  • n:第n项;
  • n-:第n项到行尾;
  • -m:行首到第m项;
  • n,m:第n项和第m项—单个的截取;
  • n-m:第n项到第m项。
# cat name.txt |cut -c 2将文件里的每一行的第2个字符截取出来u1123
# cat name.txt |cut -c 2-5   截取第2个字符到第5个字符umbe12  11  2   3   # cat name.txt |cut -c -10  ---行首到第十项number nam112      l111      l22      zh23      de# cat name.txt |cut -c 5-    ---第五项到末尾er name  age  address   phone     liu   18    shandong 123     li    20    hennan   345    zhang 16    beijing  789    deng  86    hubei    467# cat name.txt number name  age  address   phone112      liu   18    shandong 123111      li    20    hennan   34522      zhang 16    beijing  78923      deng  86    hubei    467# cat name.txt |tr -s " "|cut -d " " -f 3age18201686# cat name.txt |tr -s " "|cut -d' ' -f3age18201686

小结

  • tr
    • -d 删除;
    • -s 去重。
  • sort
    • -n 按数值大小排序;
    • -k3 指定第三列为排序列;
    • -r 递减。
  • uniq
    • -c 提取字符;
    • -f 提取字段(==列);
    • -d ‘%’ :按%来分隔字段。

练习

①只显示/etc/fstab文件的第三列# cat /etc/fstab|tr -s " "|cut -d ' ' -f3②用du -a只显示/boot目录下对象的占用空间,并按由小到大排序# du -a /boot|cut -f1|sort -n③只显示网卡eth0的IP地址#ip add|tail -3|head -1|tr -s ' '|cut -d ' ' -f3④用fdisk -l命令只显示出分区和文件系统的类型# fdisk -l|grep ^/dev/|tr -s " "|cut -d " " -f 1,7/dev/sda1 Linux/dev/sda2 LVM或 # fdisk -l|grep ^/dev/|awk '{print $1,$7}'/dev/sda1 Linux/dev/sda2 LVM⑤统计/etc/passwd文件中sbin这个单词出现多少次# cat /etc/passwd|grep -o sbin --color|wc -l--color  匹配的字符串显示颜色-o     只是显示匹配的字符串,其他的都不显示

正则表达式:

按照某种正常的规则组合起来的一个表达式,此表达式包含特殊字符+字符+数字等,用来表示一个特定的含义。

  • 基本正则:特殊字符比较少;
  • 扩展正则:元字符比较多,新加入了一些进来。
    例:
# cat /etc/fstab |grep -E  -v  "^#|^$"不显示以#开头的行或者空行

grep命令(相当于过滤)

格式:grep -[acinv] ‘搜索内容串’ filename

  • -a:以文本文件方式搜索;
  • -c:计算找到的符合行的次数;
  • -i:忽略大小写;
  • -n:顺便输出行号;
  • -o:只显示匹配的内容;
  • -v:反转查找,输出与模式不相符的行 -v, –invert-match;

扩展

  • -E:支持扩展正则表达式。
[root@chinaitsoft lianxi]# cat fruit.txt |grep -i appleappleorange   APPLEpeach   APPLE  456[root@chinaitsoft lianxi]#

PS:
egrep==grep -E ,效果一样。

在/lianxi目录下查找文件内容里包含apple的文件,显示出来:# grep -r  apple  /lianxi/lianxi/shuiguo.txt:apple/lianxi/fruit.txt:appleBinary file /lianxi/gcc-c++-4.4.7-4.el6.x86_64.rpm matches

wc 统计命令

  • -l:统计行数;
  • -w:统计单词数 (前后都是空白的一组字符);
  • -c:统计字符数(可见和不可见的字符)。
  • -

练习

1、查找出当前passwd文件中以ftp或者mail开头的行,在屏幕上输出。# cat passwd|grep -E "^ftp|^mail" mail:x:8:12:mail:/var/spool/mail:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin2、查找出当前passwd文件中首行不是以r、m、f开头的行,在屏幕上输出。# cat passwd |grep -E -v "^r|^m|^f"    (或"^[rmf]")[rmf]  代表r或者m或者f中的一个。[a-z]    代表从a-z,中间很多字符3、查找出当前passwd文件中以bash结尾的行。# cat passwd |grep -E "bash$"4、查找出/etc/login.defs文件中的有效行(不显示空行和注释行)。# cat /etc/login.defs |grep -E -v "^$|^#"

diff命令:文件差异对比

diff命令:
比较两个文件之间的差异,输出结果为两个文件的不同之处。
diff命令的输出格式:

  • -u:会将不同的地方放在一起,紧凑易读;
  • -r: 递归比较目录下的所有文件;
  • 利用diff命令生成补丁。

文件和文件的比较:

# diff -u chinaitsoft.txt  chinaitsoft_v2.txt --- chinaitsoft.txt    2016-01-17 00:53:23.093940085 +0800+++ chinaitsoft_v2.txt    2016-01-17 00:51:25.747839493 +0800@@ -1,4 +1,6 @@         ---@@代表一段范围 jinan                  -代表第一个文件+changqing                     linux chinasotf+teacher feng
# diff -u chinaitsoft.txt  chinaitsoft_v2.txt >v1-to-v2.patch生成补丁,补丁叫作v1-to-v2.patch

patch 打补丁命令

用途:用来打补丁修补文件

格式:patch [选项] 原始文件 < 补丁文件

  • -pN: N表示忽略N层路径;
  • -R: 还原到老版本。
    注意事项:
  • 如果打多个补丁,注意先后顺序;
  • 打补丁前不要修改源文件。
# patch  chinaitsoft.txt <v1-to-v2.patch patching file chinaitsoft.txt# diff chinaitsoft.txt chinaitsoft_v2.txt 
还原到原来的版本--->撤销打补丁# patch -R chinaitsoft.txt <v1-to-v2.patch patching file chinaitsoft.txt# diff chinaitsoft.txt chinaitsoft_v2.txt 1a2> changqing3a5> fenglaoshi

目录和目录的比较

1.新建目录及子目录和普通的文件[root@chinaitsoft lianxi]# mkdir  qq[root@chinaitsoft lianxi]# cd qq/[root@chinaitsoft qq]# ls[root@chinaitsoft qq]# cp /etc/hosts  .[root@chinaitsoft qq]# lshosts[root@chinaitsoft qq]# mkdir  image  sound[root@chinaitsoft qq]# lshosts  image  sound[root@chinaitsoft qq]# cd image/[root@chinaitsoft image]# ls[root@chinaitsoft image]# echo 123 >1.txt[root@chinaitsoft image]# ls1.txt[root@chinaitsoft image]#[root@chinaitsoft image]# cd ..[root@chinaitsoft qq]# lshosts  image  sound[root@chinaitsoft qq]# cd sound/[root@chinaitsoft sound]# echo "789" >3.txt[root@chinaitsoft sound]# ls3.txt[root@chinaitsoft sound]# cd ..[root@chinaitsoft qq]#[root@chinaitsoft qq]# cd ..2.生成一个升级版本的目录-r 递归的去比较子文件夹里的内容[root@chinaitsoft lianxi]# cp qq qqv2 -r[root@chinaitsoft lianxi]# diff -ur qq qqv23.更新qqv2里的内容[root@chinaitsoft lianxi]# cd qqv2[root@chinaitsoft qqv2]# lshosts  image  sound[root@chinaitsoft qqv2]# cp /etc/passwd .[root@chinaitsoft qqv2]# lshosts  image  passwd  sound[root@chinaitsoft qqv2]# cd sound/[root@chinaitsoft sound]# echo "8900" >6.txt[root@chinaitsoft sound]# cd ..[root@chinaitsoft qqv2]# lshosts  image  passwd  sound[root@chinaitsoft qqv2]# echo "123456" >hosts [root@chinaitsoft qqv2]# lshosts  image  passwd  sound[root@chinaitsoft qqv2]#[root@chinaitsoft qqv2]# cd ..[root@chinaitsoft lianxi]# diff -Nur  qq qqv2  -N 如果没有文件,就拿一个空文件和别的目录里的文件比较。
比较文件夹生成补丁:[root@chinaitsoft lianxi]# diff -Nur  qq qqv2  >patch-v2.txt
/u/howard/src/blurfl/blurfl.c-p3 的效果就是去掉第3个/前面的内容,效果如下:src/blurfl/blurfl.c-p4 的效果就是去掉第4个/前面的内容,效果如下:blurfl/blurfl.c
阅读全文
0 0
原创粉丝点击