hyytaojunming 发表于 2018-8-22 06:26:57

shell特殊符号,cut,sort,wc,uniq,tee,tr,split命令

  Linux shell中的特殊符号
  *代表零个或多个任意字符
  #ls /tmp/4_6/test*
  /tmp/4_6/test1 /tmp/4_6/test22 /tmp/4_6/test333
  ? 只代表一个任意的字符
  #touch /tmp/4_6/test*
  /tmp/4_6/test1 /tmp/4_6/test2 /tmp/4_6/testa
  # 表示注释说明,即#后面的内容都会被忽略
  #abc=123 #aaaa
  #echo $abc
  123
  脱义字符 \ 会将后面的特殊符号(如*)还原为普通字符。
  #ls –d test\*
  ls:无法访问test*:没有那个文件或目录
  再说管道符 |
  它的作用是将前面命令的输出作为后面命令的输入。并不是所有的命令都可以,一般常用对文档操作的命令比较常用。例如cat、less、head、tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等,其中grep、sed和awk都是正则表达式工具。
  命令cut
  cut用来截取某一个字段,其格式为:#cut –d ‘分隔字符’[-cf]n,n是数字。
  选项:
  -d    后面跟分隔符,分隔字符要有单引号括起来。
  -c    后面接的是第几个字符。
  -f   后面接的是第几个区块。
  #cut /etc/passwd|cut –d ‘:’ –f 1 |head -5
  root
  bin
  dameon
  adm
  lp
  -d    选项后面加冒号作为分隔符,-f 表示截取第一段,-f 和1之间的空格可有可无。
  #head -n2 /etc/passwd |cut -c2
  o
  i
  #head -n2 /etc/passwd |cut -c1
  r
  b
  #head -n2/etc/passwd|cut -c1-10
  root:x:0:0
  bin:x:1:1:
  #head -n2 /etc/passwd|cut -c5-10
  x:0:0
  x:1:1:
  -c    选项后面可以是1个数字n,也可以是一个区间n1-n2,还可以是多个数字n1、n2、n3。
  #head -n2 /etc/passwd|cut -c1,3,10
  ro0
  bn:
  sort命令
  sort用作排序,其格式为sort[-t分隔符][-kn1,n2][-nru],这里n1和n2指的是数字,其他选项的含义如下。
  选项:
  -t   后面跟分割字符,作用跟cut的-d选项一样
  -n    表示使用纯数字排序
  -r   表示反向排序
  -u    表示去重复
  -kn1,n2       表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序
  sort不加任何选项,则从首字符向后依次按ASCII码值进行比较,最后将它们按升序输出。
  #head –n5 /etc/passwd|sort
  adm:x:3:4:adm:/var/adm:/sbin/nologin
  bin:x:1:1:bin:/bin:/sbin/nologin
  dameon:x:2:2:dameon:/sbin:/sbin/nologin
  lp:x:4:7:lp:/var/spool.lpd:/sbin/nologin
  root:x:0:0:root:/root:/bin/bash
  -t      后面跟分隔符,-k选项后跟单个数字表示对第几个区域的字符串排序
  -n   则表示使用纯数字排序
  #head –n5 /etc/passwd|sort -t: -k3 -n
  head –n5 /etc/passwd|sort -t: -k3 -n
  root:x:0:0:root:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/nologin
  dameon:x:2:2:dameon:/sbin:/sbin/nologin
  adm:x:3:4:adm:/var/adm:/sbin/nologin
  lp:x:4:7:lp:/var/spool.lpd:/sbin/nologin
  -k和n2   表示对n1和n2区域内的字符串排序,-r选项则表示反向排序
  #head –n5 /etc/passwd|sort –t: -k3,5–r                     这里-k3,5对第3区域至第5区域间字符串排序
  lp:x:4:7:lp:/var/spool.lpd:/sbin/nologin
  adm:x:3:4:adm:/var/adm:/sbin/nologin
  dameon:x:2:2:dameon:/sbin:/sbin/nologin
  bin:x:1:1:bin:/bin:/sbin/nologin
  root:x:0:0:root:/root:/bin/bash
  wc命令
  wc命令用于统计文档的行数、字符数、或词数。该命令的常用选项由-l(统计行数)、-m(统计字符数)和-w(统计词数)。
  #wc /etc/passwd
  45 90 2361 /etc/passwd
  #wc -l /etc/passwd
  45 /etc/passwd
  #wc -m /etc/passwd
  2361 /ett/passwd
  #wc -w /etc/passwd
  90 /etc/passwd
  wc不跟任何选项,直接跟文档,则会把行数、词数、字符数依次输出。
  uniq命令
  uniq用来删除重复的行,该命令只有-c选项比较常用,-c 表示统计重复的行数,并把行数写在前面。
  #vim testb.txt //把下面的内容写入test.txt并保存
  111
  222
  111
  333
  使用uniq前,必须先给文件排序,否则不管用。
  #uniq testb.txt
  111
  222
  111
  333
  #sort testb.txt|uniq
  111
  222
  333
  #sort testb.txt|uniq -c
  2 111
  1 222
  1 333
  命令tee
  tee后面跟文件名,其作用类似于重定向>,比重定向多一个功能,把文件写入后面所跟的文件时并显示在屏幕上,通常用于管道符 |后。
  #echo “aaaaaaaaaaaaaaa” |tee testb.txt
  aaaaaaaaaaaaaaa
  #cat testb.txt
  aaaaaaaaaaaaaaa
  命令tr
  tr用于替换字符,常用来处理文档中出现的特殊符号,如DOS文档中出现的符号 ^M 。
  选项:
  -d 表示删除某个字符,后面跟要删除的字符。
  -s 表示删除重复的字符。
  把小写字母变成大写字母,如tr’’’’。
  #head –n2 /etc/passwd |tr’’’’
  ROOT:X:O:O:ROOT:/ROOT:/BIN/BASH
  BIN:X:11:BIN:/BIN:/SBIN/NOLOGIN
  还可以替换一个字符
  #grep‘root’ /etc/passwd |tr ‘r’ ‘R’
  Root:x:o:o:Root:/Root:/bin/bash
  opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin
  命令split
  split用于切割文档,常用的选项为-b和-l。
  选项:
  -b    表示依据大小来分割文档,单位为byte
  -l   表示依据行数来分割文档
  split -b
  #mkdir split_dir
  #cd !$
  cd split_dir
  #cp /etc/passwd ./
  #split –b 500 passwd
  #ls
  passwd xaa xab xac xad xae
  如果split不指定目标文件名,则会以xaa、xab……这样的文件名来存取切割后的文件。指定目标文件名,示例如下:
  #rm –f xa*
  #split –b 500 passwd 123
  #ls
  #123aa 123ab 123ac 123ad 123ae passwd
  split -l
  #rm -f 123a*
  #split -l 10 passwd
  #wc -l *
  45 passwd
  10 xaa
  10 xab
  10 xac
  10 xad
  5 xae
  90 总用量
  特殊符号$
  $可以用作变量前面的标识符,还可以和!结合使用。
  #cd ..
  #ls testb.txt
  testb.txt
  #ls !$
  ls testb.txt
  testb.txt
  !$表示上条命令的最后一个变量,本例中上条命令最后是testb.txt,那么在当前命令下输入!$则表示testb.txt。
  特殊符号;
  在一行命令中运行两个或两个以上的命令,需要在命令之间加符号;。
  #mkdir testb.txt ; touch test1.txt ; touch test2.txt ; ls –d test*      创建目录、创建文件、列出目录
  特殊符号~
  符号~代表用户的家目录,root用户的家目录是/root,普通用户的家目录是/home/username。
  #cd ~
  #pwd
  /root
  #su ccj
  #cd ~
  #pwd
  /home/ccj
  特殊符号&
  把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况。比如,可以用在sleep后,如下所示:
  #sleep 30 &
  3008
  #jobs
  + 运行中       sleep 30 &
  重定向符号>、>>、2>和2>>
  >和>>分别表示取代和追加的意思。当我们运行一个命令报错时,报错信息会输出到当前屏幕。如果想重定向到一个文本,则要用重定向符号2>或者2>>,它们分别表示错误重定向和错误追加重定向。
  #ls aaaa
  ls:无法访问aaaa:没有那个文件或目录
  #ls aaaa 2> /tmp/error
  #cat /tmp/error
  ls:无法访问aaaa:没有那个文件或目录
  #ls aaaa 2>> /tmp/error
  #cat /tmp/error
  ls:无法访问aaaa:没有那个文件或目录
  ls:无法访问aaaa:没有那个文件或目录
  中括号[ ]
  中括号内为字符组合,代表字符组合中的任意一个,还可以表示一个范围(1-3,a-z)。
  #cd /tmp/10
  #ls –d test*
  test1.txttest2.txttestb.txttestdir
  #ls –d test.txt
  test1.txttest2.txt
  #ls –d test.txt
  test1.txttest2.txttestb.txt
  #ls –d test.txt
  test1.txttest2.txt
  #ls –d test.txt
  test1.txttest2.txttestb.txt
  特殊符号&& ||
  #命令1;命令2      使用;时,不管命令1是否执行成功,都会执行命令2。
  #命令1&&命令2       使用&&时,只有命令1执行成功,才会执行命令2,否则不执行命令2。
  #命令1||命令2          使用||时,命令1执行成功后则不执行命令2,否则执行命令2。


页: [1]
查看完整版本: shell特殊符号,cut,sort,wc,uniq,tee,tr,split命令