bash中除grep系之外的一些文本处理命令

前端之家收集整理的这篇文章主要介绍了bash中除grep系之外的一些文本处理命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

其他的文本处理命令:
1.wc:(这个命令最常用的一些用法之前已经介绍过了,一般应用于管道进行输出)
2.cut命令:
cut - 在文件的每一行中提取片断
注意:能够被cut命令修剪的文件或数据内容,一般是具有某种特定格式或结构文本文件或数据内容
如:etc/passwd

格式:cut OPTION... [FILE]
常用选项:
-d,--delimiter=DELIM:指定在实施修剪操作时所使用的分隔符号,默认时TAB(空白选项)
-f,--fields=LIST:根据指定的字段分割符号来指定要保留的字段编号列表;
LIST称为字段列表,地址定界,其书写方法
1.NUM:选择被指定的单个数字所表示的字段,该字段将被保留;
2.NUM1,NUM2,NUM3,...:离散的多个被指定的字段的数字的列表;所有数值所代表的字段均被保留;
3.NUM1-NUM3:连续的多个被指定的字段的数字的列表;所有数值所代表的字段均被保留;
NUM1-: 从NUM 1 开始直到行尾的所有字段;
-NUM2:从行首第一个字段开始直到NUM2字段结束的所有字段;
--output-delimiter=STRING:指定输出数据时的字段分隔符号;
cut -d ":" -f 1-4 --output-delimiter=" " /etc/passwd

举个例子(我们把/etc/passwd中的前5行用户名和别名备注取出来):

  1. [root@localhost~]#cut-d":"-f1,3/etc/passwd|head-5
  2. root:0
  3. bin:1
  4. daemon:2
  5. adm:3
  6. lp:4


4.sort
sort - 对文本文件的行排序
对于指定文件中的行,按照ASCII编码表中的字符顺序进行排序输出
格式:
sort [OPTION]... [FILE]...
常用选项:
-n:以数字的数值大小作为排序依据进行排序;
-r:倒序显示排序结果;
-R:随即排序;只是此随即算法非常简陋,不太适用于复杂环境中的排序要求;
-u:重复出现的行,只出现一次,去除重复;连续且相同的行称为重复行;
-t:指定字段分隔符;
-k:指定根据那个关键字字段进行排序,一般和-t同时使用;

举个例子:(我们随便建个文件,里边随机列一些数据,然后我们用sort进行排序)

  1. [root@localhost~]#cat/tmp/test.txt
  2. 3
  3. 4
  4. 78945
  5. 45
  6. 623412
  7. 3
  8. 46797
  9. 0
  10. 2342
  11. 35
  12. 67
  13. 89
  14. [root@localhost~]#sort-n/tmp/test.txt
  15. 0
  16. 3
  17. 3
  18. 4
  19. 35
  20. 45
  21. 67
  22. 89
  23. 2342
  24. 46797
  25. 78945
  26. 623412
  27. [root@localhost~]#sort-R/tmp/test.txt|head-3
  28. 3
  29. 3
  30. 2342
  31. [root@localhost~]#sort-n/tmp/test.txt|sort-u
  32. 0
  33. 2342
  34. 3
  35. 35
  36. 4
  37. 45
  38. 46797
  39. 623412
  40. 67
  41. 78945
  42. 89

我们可以用UID来进行/etc/passwd排序,只显示前5行。

  1. [root@localhost~]#sort-n-t":"-k3/etc/passwd|head-n5
  2.  
  3. root:x:0:0:root:/root:/bin/bash
  4. bin:x:1:1:bin:/bin:/sbin/nologin
  5. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  6. adm:x:3:4:adm:/var/adm:/sbin/nologin

5.uniq
uniq - 删除排序文件中的重复行
注意:uniq本身不具备排序的功能

格式:
uniq [OPTION]... [INPUT [OUTPUT]]
常用选项:
-c:对于重复的行,计算重复次数
-d:只显示重复的行,且每个重复行组只显示一行;
-u:只显示不重复的行;

例子:(发现不连续的重复的行不认为是重复的

  1. [root@localhost~]#cat/tmp/test.txt
  2. 3
  3. 4
  4. 0
  5. 0
  6. 33
  7. q
  8. 0
  9. 33
  10. 33
  11. 33
  12. [root@localhost~]#uniq-c/tmp/test.txt
  13. 13
  14. 14
  15. 20
  16. 133
  17. 1q
  18. 10
  19. 333
  20. [root@localhost~]#sort-n/tmp/test.txt|uniq-c
  21. 30
  22. 1q
  23. 13
  24. 14
  25. 433

6.diff
diff - 找出两个文件的不同点
格式:
diff [选项] 源文件 目标文件
制作patch文件
#diff file1 file2 > patch_file

注意:patch_file中记录的是file2到的内容和file1文件相比有哪些不同;使用patch_file时,应向file1打补丁;

举个例子:(1,2不同,并根据2向1打补丁)d->删掉 a->添加

  1. [root@localhost~]#cat/tmp/text2.txt
  2. 1
  3. 123
  4. 1234
  5. 567890
  6. [root@localhost~]#cat/tmp/text1.txt
  7. 1
  8. 12
  9. 123
  10. 1234
  11. [root@localhost~]#diff/tmp/text1.txt/tmp/text2.txt
  12. 2d1
  13. <12
  14. 4a4
  15. >567890
  16. [root@localhost~]#diff/tmp/text1.txt/tmp/text2.txt>/tmp/text.patch
  17. [root@localhost~]#patch-i/tmp/text.patch/tmp/text1.txt

7.patch patch - apply changes to files 格式: patch [OPTIONS] [orginalfile [patchfile]] 常用选项: -i:用于指明patch文件的路径;例子: 12 314 56 89 191 492 9 80 76 11 87 66 1024 99 721 384从上述数字中找出最大值和最小值:(发现这些命令无法直接进行截取操作,但我们可以发现,空白字符可以用tr命令转化为换行符,然后接下来的操作就变得简单可行了,我写了代码的实行部分)最大值: cat num.txt | tr ' ' '\n' | sort -n | tail -1最小值: cat num.txt | tr ' ' '\n' | sort -n | head -1

猜你在找的Bash相关文章