shell基础下

8.10 shell特殊符号cut命令

8.11 sort_wc_uniq命令

8.12 tee_tr_split命令

8.13 shell特殊符号下

简易审计系统(必须要预习): http://www.68idc.cn/help/server/linux/2014042190951.html

扩展

1.关于PROMPT_COMMAND环境变量的含义   http://www.linuxnote.org/prompt_command-environment-variables.html

2. source exec 区别 http://alsww.blog.51cto.com/2001924/1113112
3. Linux特殊符号大全http://ask.apelearn.com/question/7720
4. sort并未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975

一、 shell特殊符号cut命令

  • cut 分割,-d 分隔符 -f 指定段号 -c 指定第几个字符
  • sort 排序, -n 以数字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2
  • wc -l 统计行数 -m 统计字符数 -w 统计词
  • uniq 去重, -c统计行数
  • tee 和>类似,重定向的同时还在屏幕显示
  • tr 替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]'
  • split 切割,-b大小(默认单位字节),-l行数

cut命令

  • cut命令用来截取某个字符串
  • 格式:cut –d “分割符” 文件名
  • -d:后面跟分割字符,分割字符用双引号括起来;
  • -f:后面跟接第几段字符串
  • -c:后面接第几个字符

截取第1到第3段

[root@linux-151 ~]# head -5 1.txt |cut -d ":" -f 1-3
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4

截取第1段和第3段

[root@linux-151 ~]# head -5 1.txt |cut -d ":" -f 1,3
root:0
bin:1
daemon:2
adm:3
lp:4

截取第2个字符

[root@linux-151 ~]# head -5 1.txt |cut -c 2
o
i
a
d
p

截取第2个字符到第5个字符

[root@linux-151 ~]# head -5 1.txt |cut -c 2-5
oot:
in:x
aemo
dm:x
p:x:

二、 sort_wc_uniq命令

sort命令

  • sort命令用做排序,格式sort [-t 分割符] [-kn1,n2] [-nur],n1,n2指的是数字
  • -t 分割符
  • -k 按第几列排序;区间范围用逗号-k3,5
  • -n 按数字排序
  • -r 反序排序,按从打到小排序
  • -u 去重复
  • -un 字母开头的会识别成重复内容,如skj1 a weotj 都会认为是重复内容,只显示数字内容

sort 不加任何选项,从首行字符向后,依次按ASCII码值进行比较,按升序排序

[root@linux-151 ~]# vim 2.txt
111
111
111
111aaa
121
!@#$@123
1asd
abab
abab
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@linux-151 ~]# sort -n 2.txt
!@#$@123
abab
abab
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
1asd
111
111
111
111aaa
121

注:如果有字母或者特殊符号,在数字排序中,都默认看成0.

反向排序

[root@linux-151 ~]# sort -nr 2.txt
121
111aaa
111
111
111
1asd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
abab
abab
!@#$@123

去重复,这里把字母都看成了0,然后去重复。

[root@linux-151 ~]# sort -nu 2.txt
abab
1asd
111
121

wc命令

  • wc命令用于统计文档的行数,字符数,单词数。
  • -l 统计行数
  • -m统计字符数
  • -w统计单词数

查看文件3.txt 行数

[root@linux-151 ~]# cat 3.txt
abab
1asd
111
121
[root@linux-151 ~]# wc -l 3.txt
4   3.txt

查看文件3.txt字符有多少个,$为行尾字符

[root@linux-151 ~]# cat -A 3.txt
abab$
1asd$
111$
121$
[root@linux-151 ~]# wc -m 3.txt
18 3.txt

-w统计单词,它是以空格或者空白字符来分割。

[root@linux-151 ~]# cat 3.txt
abab
1asd
111
121
[root@linux-151 ~]# wc -w 3.txt
4 3.txt

如果wc后面不加任何选项,直接跟文档,则会把行数,单词数,字符数依次输出。

[root@linux-151 ~]# wc 3.txt
 4  4 18 3.txt

uniq命令

  • uniq命令用来删除重复的行,通常和sort连在一起使用
  • -c选项比较常用,它表示统计重复的行数,并把行数写在前面
[root@linux-151 ~]# sort 2.txt
111
111
111
111aaa
121
!@#$@123
1asd
abab
abab
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@linux-151 ~]# sort 2.txt |uniq -c
      3 111
      1 111aaa
      1 121
      1 !@#$@123
      1 1asd
      2 abab
      1 adm:x:3:4:adm:/var/adm:/sbin/nologin
      1 bin:x:1:1:bin:/bin:/sbin/nologin
      1 daemon:x:2:2:daemon:/sbin:/sbin/nologin
      1 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
      1 root:x:0:0:root:/root:/bin/bash

[root@linux-151 ~]# sort 2.txt |uniq
111
111aaa
121
!@#$@123
1asd
abab
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


三、 tee_tr_split命令

tee命令

  • tee命令后面文件名,其作用类似于重定向>;但是它比重定向多一个显示在屏幕上的功能;
[root@linux-151 ~]# cat 3.txt >4.txt
[root@linux-151 ~]# cat 3.txt |tee 4.txt
abab
1asd
111
121

  • tee –a 相当于追加重定向>>;它多了一个显示在屏幕上的功能
[root@linux-151 ~]# cat 3.txt |tee -a 4.txt
abab
1asd
111
121
[root@linux-151 ~]# cat 3.txt |tee -a 4.txt
abab
1asd
111
121
[root@linux-151 ~]# cat 4.txt
abab
1asd
111
121
abab
1asd
111
121
abab
1asd
111
121

命令tr

  • tr命令用于替换字符
[root@linux-151 ~]# cat 3.txt |tr 'a' 'A'
AbAb
1Asd
111
121

[root@linux-151 ~]# cat 3.txt |tr '[a-z]' '[A-Z]'
ABAB
1ASD
111
121

split命令

  • split 用于分割文档
  • split -l 按行来分割
  • split -b 按大小来分割
  1. split -b
[root@linux-151 ~]# mkdir test
[root@linux-151 ~]# cd test
[root@linux-151 test]# find /etc/ -type f -name "*.conf" -exec cat {} >1.txt \;
[root@linux-151 test]# du -sh 1.txt
252K	1.txt
[root@linux-151 test]# split -b 50k 1.txt
[root@linux-151 test]# ls
1.txt  xaa  xab  xac  xad  xae  xaf

  1. split –l
[root@linux-151 test]# wc -l 1.txt
6479 1.txt
[root@linux-151 test]# split -l 1000 1.txt
[root@linux-151 test]# ls
1.txt  xaa  xab  xac  xad  xae  xaf  xag

  • split 后面如果不指定文件名,则会以xaa,xab。。。这样的文件名来存取切割后的文件
  1. 指定目标分割文件名 为abc.
[root@linux-151 test]# split -l 1000 1.txt abc.
[root@linux-151 test]# ls
1.txt  abc.aa  abc.ab  abc.ac  abc.ad  abc.ae  abc.af  abc.ag


四、 shell特殊符号下

  • $ 变量前缀,!$组合,正则里面表示行尾
  • ;多条命令写到一行,用分号分割
  • ~ 用户家目录,后面正则表达式表示匹配符
  • & 放到命令后面,会把命令丢到后台
  • 重定向 > 追加重定向>> 错误重定向2> 错误追加重定向2>> 正确和错误重定向&>
  • [ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]
  • || 和 && ,用于命令之间
  • $:可以作为变量前面的标示符,可以和!结合起来使用,在正则里面表示行尾
[root@linux-151 test]# ls /root
11.txt      123     1.txt   2.txt        3.txt   anaconda-ks.cfg  d6z
11.txt.bak  1a.txt  +2      321.txt      4.txt   a.txt            test
12          1.log   23.txt  321.txt.bak  ab.txt  b.txt            
[root@linux-151 test]# ls !$
ls /root
11.txt      123     1.txt   2.txt        3.txt   anaconda-ks.cfg  d6z
11.txt.bak  1a.txt  +2      321.txt      4.txt   a.txt            test
12          1.log   23.txt  321.txt.bak  ab.txt  b.txt           

  • ; 多条命令写在一行,用;分割
[root@linux-151 ~]# cat 2.txt;cat 3.txt
111
111aaa
121
111
abab
1asd
abab
!@#$@123
111
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
abab
1asd
111
121

  • ~ 家目录,后面正则表示匹配符

  • 重定向(正确) > ,会覆盖以前的内容

[root@linux-151 ~]# echo "121212">3.txt
[root@linux-151 ~]# cat 3.txt
121212
  • 追加重定向(正确)>>
[root@linux-151 ~]# echo "ababab">>3.txt
[root@linux-151 ~]# cat 3.txt
121212
Ababab
  • 错误重定向 2>
[root@linux-151 ~]# cat 5.txt 2>6.txt
[root@linux-151 ~]# cat 6.txt
cat: 5.txt: 没有那个文件或目录

  • 错误追加重定向 2>>
[root@linux-151 ~]# cat 6.txt
cat: 5.txt: 没有那个文件或目录
cat: 5.txt: 没有那个文件或目录

  • &> 错误和正确都重定向到某个文件里面。
[root@linux-151 ~]# cat 3.txt 5.txt &> 6.txt
[root@linux-151 ~]# cat 6.txt
121212
ababab
cat: 5.txt: 没有那个文件或目录

  • shell中的链接符号 && || ;
  • && 前面命令执行成功后,才会执行后面的命令;如果前面执行不成功,后面命令不执行
  • || 前面的命令执行不成功,才会执行后面的命令;如果前面命令执行成功,后面命令不执行
  • ; 左边的命令成功与否,后边的命令都会执行
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值