nics 发表于 2018-8-28 11:05:07

Linux——note shell常用命令 cut 、sort、unqi、tee、tr、split和shell中连接符&& ||

  1、cut
  常用作将一个文件分段
  cut -d'分隔符' [-cf] n
  -d 后面指定分隔符,用单引号引起来。
  -f 指定第几段
  -c 后面只有一个数字表示截取第几个字符,后面跟一个数字区域,表示截取从几到几。
  # cut -d: -f 3 /etc/passwd
  # cut -d: -f 3,4 /etc/passwd
  # cut -c 10 /etc/passwd
  # cut -c 1-10 /etc/passwd
  2、sort(排序默认以ASCII值排序)
  sort [-t 分隔符] [-kn1,n2] [-nru]
  -t 分隔符:作用与cut的-的一个意思
  -n 使用纯数字排序默认升序
  -r 反向排序,数字降序
  -u 去重复
  -kn1,n2: 由n1区间排序到n2区间,可以只写kn1,即只对n1字段排序。
  # sort /etc/passwd
  # sort -t: -k3 /etc/passwd
  # sort -t: -k3 -n /etc/passwd
  # sort -t: -k3,5 -n /etc/passwd 指定范围
  # sort -t: -k3,5 -r -n /etc/passwd
  user1:x:510:510::/home/user1:/bin/bash
  user2:x:508:500::/home/user3:/sbin/nologin
  # sort -u 2.txt
  # sort -nu 2.txt -nu一起使用时会将里面的多个字符串或字符当作一个数字来处理,只显示一个字符串或字符。
  sort排序时,-n选项会把所有字母都看成是0,再加个-u去重复,当然就剩一个字符串或字符了。
  3、wc
  wc -l(计算行)-w(word) -m(大小即多少个字符)
  # wc -l 1.txt 2.txt
  2 1.txt
  22 2.txt
  24 总用量
  # wc -w 1.txt (以一个分隔符为一个word)
  6 1.txt
  # cat 1.txt
  ls: 无法访问11111: 没有那个文件或目录
  ls: 无法访问11111: 没有那个文件或目录
  # wc -m 1.txt
  50 1.txt
  # echo "12345"|wc -m换行符也是一个字符
  6
  wc-c, --bytes 输 出 字 节 数 统 计
  -m, --chars 输 出 字 符 数 统 计
  -l, --lines 输 出 行 数 统 计
  -w, --words print the word counts就是文档当中有几个词
  4、uniq和tee
  uniq去重复并计算出有多少行重复,比sort -u多一个功能。
  uniq -c 统计重复行数,并把行数写在前面,弊端就是若重复的两字符不在一起就无法判断重复需要先排序。
  # uniq -c 2.txt
  # sort2.txt|uniq -c
  若不加-c选项就和sort -u 一致了。
  tee后跟文件名,类似重定向>,但比重定向多一个功能,在把文件写入后面所跟的文件的同时还显示在屏幕上
  # echo "123" > 1.txt
  # cat 1.txt
  123
  # echo "11111"|tee 1.txt
  11111
  # echo "123" > 1.txt
  # cat 1.txt
  123
  # echo "11111"|tee 1.txt
  11111
  tee -i 使用追加模式进行重定向
  单引号里面所有特殊符号都会变成普通符号,比如 '123$a' 这里面的$a就不是引用变量了, 如果用双引号就可以引用变量 "123$a" 我具体举个例子吧:
  # a=9; echo '123$a'; b=8; echo "123$b"
  123$a
  1238
  5、tr和split
  tr 用于替换字符,常用作文档中出现的特殊符号处理
  tr -d 删除某个字符,-d后面跟要删除的字符
  -s 把重复的字符去掉
  注:替换、删除以及去重复是针对一个字符来讲的,针对一个字符串就不管用了。
  # ls *.txt | tr 'a-z' 'A-Z'
  123.TXT
  #1.TXT
  1.TXT
  2.TXT
  3.TXT
  A.TXT
  # echo "hfdufeurh273498834ndlgj"|tr 'h' 'H'
  HfdufeurH273498834ndlgj
  # echo "hfdufeurh273498834ndlgj"|tr 'abcfd' 'ABCFD'
  hFDuFeurh273498834nDlgj
  split 用于切割文档
  split -b 依据大小来分割文档,单位为byte(若要写以M,K为单位则需指明如split -b 100m /100k)
  -l 依据行来分割文档
  # ls
  anaconda-ks.cfg
  # wc -l anaconda-ks.cfg
  32 anaconda-ks.cfg
  # split -l 10 anaconda-ks.cfg
  # ls
  anaconda-ks.cfgxaaxabxacxad
  # wc -l x*
  10 xaa
  10 xab
  10 xac
  2 xad
  32 总用量
  # du -sb anaconda-ks.cfg
  943   anaconda-ks.cfg
  # split -b 100 anaconda-ks.cfg
  # ls -lh x*
  -rw-r--r-- 1 root root 100 1月   6 23:29 xaa
  -rw-r--r-- 1 root root 100 1月   6 23:29 xab
  -rw-r--r-- 1 root root 100 1月   6 23:29 xac
  -rw-r--r-- 1 root root 100 1月   6 23:29 xad
  -rw-r--r-- 1 root root 100 1月   6 23:29 xae
  -rw-r--r-- 1 root root 100 1月   6 23:29 xaf
  -rw-r--r-- 1 root root 100 1月   6 23:29 xag
  -rw-r--r-- 1 root root 100 1月   6 23:29 xah
  -rw-r--r-- 1 root root 100 1月   6 23:29 xai
  -rw-r--r-- 1 root root43 1月   6 23:29 xaj
  可以给分割的文件命令如:
  # split -l 10 anaconda-ks.cfg new_
  # ls
  anaconda-ks.cfgnew_abnew_adxabxadxafxahxaj
  new_aa         new_acxaa   xacxaexagxai
  6、shell中的连接符&& ||
  && 左边命令执行成功后,才会执行右边命令
  || 左边命令执行不成功,才会执行右边命令
  ;左边命令执行成功与否,右边命令都会执行
  # ls 1.txt && ls 2.txt
  1.txt
  2.txt
  # ls 10.txt && ls 2.txt
  ls: 无法访问10.txt: 没有那个文件或目录
  # ls 1.txt || ls 20.txt
  1.txt
  # ls 10.txt || ls 2.txt
  ls: 无法访问10.txt: 没有那个文件或目录
  2.txt
  # ls 1.txt ||ls 2.txt
  1.txt
  # ls 10.txt ; ls 2.txt
  ls: 无法访问10.txt: 没有那个文件或目录
  2.txt
  # ls 1.txt ;ls 2.txt
  1.txt
  2.txt

页: [1]
查看完整版本: Linux——note shell常用命令 cut 、sort、unqi、tee、tr、split和shell中连接符&& ||