首页 > 系统服务 > 详细

8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下

时间:2018-01-12 23:53:16      阅读:362      评论:0      收藏:0      [点我收藏+]

 

技术分享图片

[root@lizhipeng01 ~]# ls
111 234 anaconda-ks.cfg dir3 test5 yum.log
123 2.txt a.txt dir4 testb.txt 学习计划安排.txt
1_hard.txt 2.txt.bak bb split_dir testc.txt
1.txt 3.txt dir2 test4 Thinking_In_Java(中文版_第四版).pdf
[root@lizhipeng01 ~]# ls test*
test4 test5 testb.txt testc.txt
[root@lizhipeng01 ~]# ls test?
test4 test5
[root@lizhipeng01 ~]# ls test\*         脱意字符,*没有了特殊意义
ls: 无法访问test*: 没有那个文件或目录
[root@lizhipeng01 ~]#

[root@lizhipeng01 tmp]# abc=123 #aaa
[root@lizhipeng01 tmp]# echo $abc
123

 

命令cat

cut命令用来截取某一个字段,其格式为cut -d ‘分隔字符‘ [-cf] n,n表示数字。

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

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

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

[root@lizhipeng01 ~]# cat /etc/passwd |cut -d ‘:‘ -f 1 |head -5            取/etc/passwd文件头5行的第一列
root
bin
daemon
adm
lp

-d选项后面加冒号作为分隔字符,-f 1表示截取第一段,-f和1之间的空格可有可无。

 

[root@lizhipeng01 ~]# head -n2 /etc/passwd |cut -c2
o
i
[root@lizhipeng01 ~]# head -n2 /etc/passwd |cut -c1
r
b
[root@lizhipeng01 ~]# head -n2 /etc/passwd |cut -c1-10
root:x:0:0
bin:x:1:1:
[root@lizhipeng01 ~]#
[root@lizhipeng01 ~]# head -n2 /etc/passwd |cut -c5-10
:x:0:0
x:1:1:

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

[root@lizhipeng01 ~]# head -n2 /etc/passwd |cut -c1,3,10
ro0
bn:

技术分享图片

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

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

-n:表示使用纯数字排序

-r:表示反向排序

-u:表示去重复

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

[root@lizhipeng01 ~]# sort /etc/passwd        sort排序,按照首字符向后依次按ASCII码值进行比较,最后将它们按升序输出
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lizhipeng:x:1000:1000::/home/lizhipeng:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@lizhipeng01 ~]# 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

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

[root@lizhipeng01 ~]# 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@lizhipeng01 ~]# 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

命令wc

wc命令用于统计文档的行数、字符数或词数。该命令的常用选项有-l(统计行数)、-m(统计字符数)和-w(统计词数)

[root@lizhipeng01 ~]# wc /etc/passwd
26 44 1211 /etc/passwd
[root@lizhipeng01 ~]# wc -l /etc/passwd
26 /etc/passwd
[root@lizhipeng01 ~]# wc -m /etc/passwd
1211 /etc/passwd
[root@lizhipeng01 ~]# wc -w /etc/passwd
44 /etc/passwd

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

命令uniq

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

[root@lizhipeng01 ~]# vim testb.txt

111
222
111
333

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

[root@lizhipeng01 ~]# uniq testb.txt
111
222
111
333

[root@lizhipeng01 ~]# sort testb.txt |uniq
111
222
333

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

命令tee

tee命令后面跟文件名,其作用类似于重定向>,但是它比重定向多了一个功能,即把文件写入后面所跟的文件时,还显示在屏幕上

该命令常用于管道符|后

[root@lizhipeng01 ~]# echo "kkkkkkkk" |tee testb.txt
kkkkkkkk
[root@lizhipeng01 ~]# cat testb.txt
kkkkkkkk

命令tr

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

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

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

[root@lizhipeng01 ~]# 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@lizhipeng01 ~]# grep ‘root‘ /etc/passwd |tr ‘r‘ ‘R‘
Root:x:0:0:Root:/Root:/bin/bash
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin

命令split

split命令用于切割文档,常用的选项为-b和-l。

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

[root@lizhipeng01 ~]# mkdir split_dir
mkdir: 无法创建目录"split_dir": 文件已存在
[root@lizhipeng01 ~]# cd split_dir
[root@lizhipeng01 split_dir]# ls
passwd xaa xab
[root@lizhipeng01 split_dir]# cp /etc/passwd ./
cp:是否覆盖"./passwd"? y
[root@lizhipeng01 split_dir]# split -b 500 passwd
[root@lizhipeng01 split_dir]# ls
passwd xaa xab xac

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

[root@lizhipeng01 split_dir]# rm -f xa*
[root@lizhipeng01 split_dir]# split -b 500 passwd 123
[root@lizhipeng01 split_dir]# ls
123aa 123ab 123ac passwd

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

[root@lizhipeng01 split_dir]# rm -f 123a*
[root@lizhipeng01 split_dir]# split -l 10 passwd
[root@lizhipeng01 split_dir]# wc -l *
26 passwd
10 xaa
10 xab
6 xac
52 总用量

技术分享图片

特殊符号$

符号$可以用作变量前面的标识符,还可以和!结合起来使用

[root@lizhipeng01 split_dir]# cd ..
[root@lizhipeng01 ~]# ls testb.txt
testb.txt
[root@lizhipeng01 ~]# ls !$
ls testb.txt
testb.txt

!$表示上条命令中最后一个变量。

特殊符号;

一行中运行两个或两个以上的命令,需要在命令之间加符号

特殊符号~

符号~表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username。

[root@lizhipeng01 ~]# cd ~
[root@lizhipeng01 ~]# pwd
/root
[root@lizhipeng01 ~]# su - lizhipeng
上一次登录:四 1月 11 05:19:32 CST 2018pts/0 上
[lizhipeng@lizhipeng01 ~]$ cd ~
[lizhipeng@lizhipeng01 ~]$ pwd
/home/lizhipeng

特殊符号&

如果想把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况,例如,可以用在sleep后。

[lizhipeng@lizhipeng01 ~]$ sleep 30 &
[1] 2737
[lizhipeng@lizhipeng01 ~]$ jobs
[1]+ 运行中 sleep 30 &

重定向符号>、>>、2>和2>>

重定向符号>和>>,它们分别表示取代和追加的意思。当运行一个命令报错时,报错信息会输出到当前屏幕。如果想重定向到一个文本,则需要用重定向符号2>或者2>>,它们分别表示错误重定向和错误追加重定向。

[root@lizhipeng01 ~]# ls aaaa
ls: 无法访问aaaa: 没有那个文件或目录
[root@lizhipeng01 ~]# ls aaaa 2> /tmp/error
[root@lizhipeng01 ~]# cat /tmp/error
ls: 无法访问aaaa: 没有那个文件或目录
[root@lizhipeng01 ~]# ls aaaa 2>> /tmp/error
[root@lizhipeng01 ~]# cat /tmp/error
ls: 无法访问aaaa: 没有那个文件或目录
ls: 无法访问aaaa: 没有那个文件或目录

中括号[]

中括号内为字符组合,代表字符组合中的任意一个

特殊符号&&和||

command1;commond2

commond1 && commond2

commond1 || commond2

使用;时,不管commond1是否执行成功,都会执行commond2。

使用&&时,只有commond1执行成功后,commond2才会执行,否则commond2不执行

使用||时,commond1执行成功后则commond2不执行,否则执行commond2,即commond1和commond2中总有一条命令会执行

[root@lizhipeng01 ~]# rm -f test*
[root@lizhipeng01 ~]# touch test1 test3
[root@lizhipeng01 ~]# ls test2 && touch test2
ls: 无法访问test2: 没有那个文件或目录

[root@lizhipeng01 ~]# ls test2
ls: 无法访问test2: 没有那个文件或目录

只有当ls test2成功执行后,才会执行touch test2。因为test2不存在,ls test2没有执行成功,所以&&后面的touch test2并没有执行。

[root@lizhipeng01 ~]# ls test2 || touch test2
ls: 无法访问test2: 没有那个文件或目录
[root@lizhipeng01 ~]# ls test*
test1 test2 test3

若ls test2执行不成功,则会执行touch test2。因为test2不存在,所以ls test2没有执行成功,转而执行||后面的touch test2,所以增加了test2这个文件。

 

8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下

原文:https://www.cnblogs.com/sisul/p/8277950.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!