博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五周五次课
阅读量:6004 次
发布时间:2019-06-20

本文共 7581 字,大约阅读时间需要 25 分钟。

hot3.png

8.10 shell特殊符号cut命令

8.11 sort_wc_uniq命令

8.12 tee_tr_split命令

8.13 shell特殊符号下

相关测验题目:http://ask.apelearn.com/question/5437 扩展

1. source exec 区别 http://alsww.blog.51cto.com/2001924/1113112

2. Linux特殊符号大全http://ask.apelearn.com/question/7720

3. sort并未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975

8.10 shell特殊符号cut命令

1. 特殊符号

  • * 任意个任意字符

*代表零个或多个任意字符

  • ? 任意一个字符

?只代表一个任意的字符

  • # 注释字符

表示注释说明,即#后面的内容都会被忽略

  • \ 脱义字符

这个字符会将后面的特殊符号 (如*) 还原为普通字符

  • | 管道符

这个字符前面曾多次出现过,它的作用是将前面命令的输出作为后面命令的输人。这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用。例如cat、less、head, tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等,其中grep、sed和awk是正则表达式,必须掌握的工具

2.cut命令

cut命令用来截取某一个字段

其格式为cut  –d  '分隔字符'  [-cf] n

  • -d: 后面跟分隔字符,分隔字符要用单引号括起来。

  • -c: 后面接的是第几个字符。

  • -f: 后面接的是第几个区块

-d后面加:作为分割字符,-f1表示截取第一段,-f和1之间的空格可有可无。

[root ~]# cat /etc/passwd | cut -d ':' -f 1 | head -5

root
bin
daemon
adm
lp

-c选项后面可以是1个数字n,也可以是一个区间n1-n2,还可以是多个数字n1、n2和n3。

[root ~]# head -n2 /etc/passwd | cut -c2

o
i
[root ~]# head -n2 /etc/passwd | cut -c1
r
b
[root ~]# head -n2 /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root ~]# head -n2 /etc/passwd | cut -c1-10
root:x:0:0
bin:x:1:1:

[root@localhost ~]# head -n2 /etc/passwd | cut -c1,3,10

ro0
bn:
[root@localhost ~]# 

8.11 sort_wc_uniq命令

1. sort命令用做排序,其格式为sort  [ -t  分隔符]  [kn1,n2 ] [-nru],这里n1和n2指的是数字。

  • -t : 后面跟分隔字符,作用跟cut的-d选项一样。

  • -n:表示使用纯数字排序。字母和特殊符号都为0。

  • -r:表示反向排序。

  • -u:表示去重复

  • -kn1,n2: 表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序。

如果sort不加任何选项,则从首字符向后依次按ASCII码值进行比较, 最后将它们按升序输出。

[root@localhost ~]# head -n5 /etc/passwd | sort

adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# 

-t选项后面加分隔符,-k选项后面跟单个数字表示对第几个区域的字符串排序,-n选项则表示使用纯数字排序。

[root@localhost ~]# head -n5 /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
[root@localhost ~]# head -n5 /etc/passwd | sort -t: -k3 -n
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
-k选项后面跟数字n1和n2表示对第n1和n2区域的字符串排序,-r表示反向排序。

[root@localhost ~]# head -n5 /etc/passwd | sort -t: -k3,5 -r

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# 

这里的-k3,5表示对第3至第5区域内的字符串排序。

2. wc命令用于统计文档的行数、字符数或词数。

常用选项

  • -l:统计行数

  • -m:统计字符数

  • -w:统计词数

  • 不跟任何选项,直接跟文档,则会把行数、词数和字符数依次输出

[root@localhost ~]# wc /etc/passwd

  21   43 1040 /etc/passwd
[root@localhost ~]# wc -l /etc/passwd
21 /etc/passwd
[root@localhost ~]# wc -m /etc/passwd
1040 /etc/passwd
[root@localhost ~]# wc -w /etc/passwd
43 /etc/passwd
[root@localhost ~]# 

3. uniq命令用来删除重复的行,该命令只有-c选项比较常用,它表示统计重复的行数,并把行数写在前面。

[root@localhost ~]# vim testb.txt

111

222
111
333

使用uniq前,必须先给文件排序,否则不管用。

[root@localhost ~]# uniq testb.txt 

111
222
111
333
[root@localhost ~]# sort testb.txt | uniq
111
222
333
[root@localhost ~]# sort testb.txt | uniq -c
      2 111
      1 222
      1 333
[root@localhost ~]# 

8.12 tee_tr_split命令

1. 命令tee后面跟文件名,作用和重定向>类似,重定向的同时还在屏幕显示,该命令常用于管道符 | 后。

有2层含义:先重定向,再把管道前面的结果打印在屏幕上。

[root@localhost ~]# echo "aaa" | tee testb.txt

aaa
[root@localhost ~]# cat testb.txt 
aaa

清空testb.txt,就用命令>可以了

[root@localhost ~]# >testb.txt 

[root@localhost ~]# cat testb.txt 
[root@localhost ~]# 

选项“-a“就是追加

[root@localhost ~]# vim 2.txt 

111

222
111
333

[root@localhost ~]# cat testb.txt 

[root@localhost ~]# sort 2.txt | uniq -c |tee -a testb.txt 
      2 111
      1 222
      1 333
[root@localhost ~]# sort 2.txt | uniq -c |tee -a testb.txt 
      2 111
      1 222
      1 333
[root@localhost ~]# cat testb.txt 
      2 111
      1 222
      1 333
      2 111
      1 222
      1 333
[root@localhost ~]# 

2. tr命令用于替换字符,常用来处理文档中出现的特殊符号。

该命令常用的选项有以下两个。

  • -d:表示删除某个字符,后面跟要删除的字符。

  • -s:表示删除重复的字符。

tr命令常用于把小写字母变成大写字母,如tr'[a-z]''[A-Z]'。

[root@localhost ~]# head -n2 /etc/passwd |tr '[a-z]' '[A-Z]'

ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
[root@localhost ~]# 

tr命令还可以替换一个字符;

[root@localhost ~]# grep 'root' /etc/passwd |tr 'r' 'R'

Root:x:0:0:Root:/Root:/bin/bash
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin

[root@localhost ~]# echo "aminglinux" |tr '[al]' '[AL]'

AmingLinux

[root@localhost ~]# echo "aminglinux" |tr '[a-z]' '1'

1111111111
[root@localhost ~]# 

不过替换、删除以及去重复等操作都是针对一个字符来讲的,有一定的局限性;如果针对一个字符串,就不能使用了,所以你只需要简单了解一下tr命令即可。

3. split命令用于切割文档

常用的选项

  • -b:表示依据大小来分割文档,单位为byte

  • -l:表示依据行数来分割文档

[root@localhost ~]# mkdir split_dir

[root@localhost ~]# cd !$
cd split_dir
[root@localhost split_dir]# cp /etc/passwd ./
[root@localhost split_dir]# split -b 500 passwd
[root@localhost split_dir]# ls
passwd  xaa  xab  xac
[root@localhost split_dir]# 

如果split不指定目标文件名,则会以xaa、xab…..这样的文件名来存取切割后的文件。当然,我们也可以指定目标文件名。

[root@localhost split_dir]# rm -rf xa*

[root@localhost split_dir]# split -b 500 passwd 123
[root@localhost split_dir]# ls
123aa  123ab  123ac  passwd
[root@localhost split_dir]# 

[root@localhost split_dir]# rm -rf 123*

[root@localhost split_dir]# split -l 10 passwd
[root@localhost split_dir]# ls
passwd  xaa  xab  xac
[root@localhost split_dir]# wc -l *
  21 passwd
  10 xaa
  10 xab
   1 xac
  42 total
[root@localhost split_dir]# 

8.13 shell特殊符号下

  • $ 变量前缀,!$组合,正则里面表示行尾

[root@localhost split_dir]# cd ..

[root@localhost ~]# ls testb.txt 
testb.txt
[root@localhost ~]# ls !$
ls testb.txt
testb.txt
[root@localhost ~]# 

  • ;多条命令写到一行,用分号分割

[root@localhost ~]# mkdir testdir ; touch test1.txt ; touch test2.txt ; ls -d test*

test1.txt  test2.txt  testb.txt  testdir
[root@localhost ~]# 

  • ~ 用户家目录,root用户的家目录是/root,普通用户则是/home/username,后面正则表达式表示匹配符

[root@localhost ~]# cd ~

[root@localhost ~]# pwd
/root
[root@localhost ~]# su aming
[aming@localhost root]$ cd ~
[aming@localhost ~]$ pwd
/home/aming
[aming@localhost ~]$ 

  • & 放到命令后面,会把命令丢到后台,它常用于命令运行时间较长的情况

[aming@localhost ~]$ sleep 30 &

[1] 2513
[aming@localhost ~]$ jobs
[1]+  Running                 sleep 30 &
[aming@localhost ~]$ 

  • 重定向符号>; >>; 2>; 2>>; &>

[root@localhost ~]# ls aaaa

ls: cannot access aaaa: No such file or directory
[root@localhost ~]# ls aaaa 2> /tmp/error
[root@localhost ~]# cat !$
cat /tmp/error
ls: cannot access aaaa: No such file or directory
[root@localhost ~]# ls aaaa 2>> /tmp/error
[root@localhost ~]# cat !$
cat /tmp/error
ls: cannot access aaaa: No such file or directory
ls: cannot access aaaa: No such file or directory
[root@localhost ~]# 

  • [ ] 为字符组合,用于指定字符中的一个,可以是一个范围[0-9],[a-zA-Z],[abc]

[root@localhost ~]# cd /tmp/10

[root@localhost 10]# ls -d test*
test1.txt  test2.txt  testb.txt  testdir
[root@localhost 10]# ls -d test[1-3].txt
test1.txt  test2.txt
[root@localhost 10]# ls -d test[12b].txt
test1.txt  test2.txt  testb.txt
[root@localhost 10]# ls -d test[1-9].txt
test1.txt  test2.txt
[root@localhost 10]# ls -d test[1-9a-z].txt
test1.txt  test2.txt  testb.txt
[root@localhost 10]# 

  • || 和 && ,用于命令之间

command1;command2 :使用;时,不管command1是否执行成功,都会执行command2。

command1 && command2 :使用&&时,只有command1执行成功后,command2才会执行,否则command2不执行。

command1 | | command2:使用 | | 时,command1执行成功后则command2不执行,否则执行command2,即command1和command2中总有一条命令会执行。

[root@localhost 10]# rm -rf test*

[root@localhost 10]# touch test1 test3
[root@localhost 10]# ls test2 && touch test2
ls: cannot access test2: No such file or directory
[root@localhost 10]# ls test2
ls: cannot access test2: No such file or directory
[root@localhost 10]# ls test2 || touch test2
ls: cannot access test2: No such file or directory
[root@localhost 10]# ls test*
test1  test2  test3
[root@localhost 10]# 

友情链接:

转载于:https://my.oschina.net/u/3744518/blog/1606351

你可能感兴趣的文章
4.09.1
查看>>
电话本管理程序(实现增删改查功能)
查看>>
LOCK_TIMEOUT
查看>>
Python脱产8期 Day29 2019/5/24
查看>>
学c#语言的感想
查看>>
Windows 驱动模型的发展历史
查看>>
Android视图的截图
查看>>
App列表之分组ListView
查看>>
Android&iOS崩溃堆栈上报
查看>>
关于iOS开发的各种证书
查看>>
【Openjudge】 算24
查看>>
lvreduce -L 1000M /dev/vg0/lv0 表示最后缩减至多大,不是减少了多大
查看>>
ES 自动恢复分片的时候不恢复了是磁盘超过了85%,然后不恢复了 ES可以配置多个数据目录...
查看>>
linux查杀病毒的几个思路
查看>>
宽带速度
查看>>
构建之法阅读笔记5
查看>>
Android判断网络连接状态
查看>>
leetcode_1033. Moving Stones Until Consecutive
查看>>
logback logback.xml常用配置详解(二)<appender>
查看>>
js常用的函数库
查看>>