第十课预习笔记

8.10 shell特殊符_cut命令

* 匹配任意字符;

?匹配任意单个字符;

# 注释字符;

\ 脱意字符;

| 管道字符。

cut命令:用来显示行中的指定部分,删除文件中指定字段。

选项:

  • -b:仅显示行中指定直接范围的内容;
  • -c:仅显示行中指定范围的字符;
  • -d:指定字段的分隔符,默认的字段分隔符为“TAB”;
  • -f:显示指定字段的内容;
  • -n:与“-b”选项连用,不分割多字节字符;
  • --complement:补足被选择的字节、字符或字段;
  • --out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
  • --help:显示指令的帮助信息;
  • --version:显示指令的版本信息。

用cut命令对 /etc/passwd 的前两行进行截取操作(操作不会影响源文件)。

[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -d ":" -f 1    #用“:”进行分割,截取第一段;
root
bin
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -d ":" -f 1,2    #用“:”进行分割,截取第一段和第二段;
root:x
bin:x
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -d ":" -f 1-3     #用“:”进行分割,截取一到三段;
root:x:0
bin:x:1
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -c 1-3    #截取从第一个到第三个字符;
roo
bin
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -c -5    #截取从第一个到第五个字符;
root:
bin:x
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -c 5-    #截取从第五个到最后一个符;
:x:0:0:root:/root:/bin/bash
x:1:1:bin:/bin:/sbin/nologin
[root@liang-00 ~]#

cut命令默认的分隔符为“Tab”

8.11 sort_wc_uniq命令

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

参数:

  • -b:忽略每行前面开始出的空格字符;
  • -c:检查文件是否已经按照顺序排序;
  • -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
  • -f:排序时,将小写字母视为大写字母;
  • -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
  • -m:将几个排序号的文件进行合并;
  • -M:将前面3个字母依照月份的缩写进行排序;
  • -n:依照数值的大小排序;
  • -o<输出文件>:将排序后的结果存入制定的文件;
  • -r:以相反的顺序来排序;
  • -t<分隔字符>:指定排序时所用的栏位分隔字符;
  • +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

用 sort 对 /etc/passwd 进行排序。

[root@liang-00 ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/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
liang:x:1000:1000::/home/liang:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

可以看到:sort 命令将以默认的方式将文本文件的第一列以ASCII 码的次序排列(其实并不一定,还跟一些环境变量有关),并将结果输出到标准输出。关于ASCII码可以看一下百度百科里对ASCII码的介绍https://baike.baidu.com/item/ASCII

如果文本里有数字、特殊符号的呢?

[root@liang-00 ~]# head /etc/passwd >1.txt    #取/etc/passwd的前十行
[root@liang-00 ~]# vim 1.txt    #添加一些数字和特殊符号 
[root@liang-00 ~]# sort 1.txt    #进行sort排序 ------>  结果为:特殊符号排在最前边,数字紧跟其后,最后字母。  
<
>
)
[
]
{
}
&
%
1111111
2122222
22222222
4444444
adm:x:3:4:adm:/var/adm:/sbin/nologin
*asda
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
[root@liang-00 ~]#

sort -n 依照数值的大小排序。

sort -r  以相反的顺序来排序。

wc命令 用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

参数:

  • -c或--bytes或--chars 只显示Bytes数。
  • -l或--lines 只显示行数。
  • -w或--words 只显示字数。

直接使用 wc 命令不加任何参数。

[root@liang-00 ~]# wc anaconda-ks.cfg 
 129  258 4930 anaconda-ks.cfg    #129为行数,258为字数,4930为字符数

-l 选项统计行数。

[root@liang-00 ~]# wc -l anaconda-ks.cfg 
129 anaconda-ks.cfg
[root@liang-00 ~]# 

-m 选项统计字符数

[root@liang-00 ~]# wc -m 2.txt 
16 2.txt
[root@liang-00 ~]# cat -A 2.txt    #统计为16个字符数,包括三个$换行符,一个空格。
1111$
2222$
33 33$
[root@liang-00 ~]# 

-w 统计单词数。

[root@liang-00 ~]# wc -w 2.txt 
4 2.txt
[root@liang-00 ~]# cat 2.txt 
1111
2222
33 33
[root@liang-00 ~]# 

uniq命令 用于检查及删除文本文件中重复出现的行列。一般与sort一起使用。

参数:

  • -c或——count:在每列旁边显示该行重复出现的次数;
  • -d或--repeated:仅显示重复出现的行列;
  • -f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
  • -s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
  • -u或——unique:仅显示出一次的行列;
  • -w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。

uniq通常与sort一起使用,先排序在去重。

[root@liang-00 ~]# uniq 2.txt    #在没有排序的情况下不没有去重。
1
2222
1
33 33
abc
ccc
bbb
ffffff
[root@liang-00 ~]# sort 2.txt |uniq    #先排序,在去重。
1
2222
33 33
abc
bbb
ccc
ffffff

-c 在每列旁边显示该行重复出现的次数。

[root@liang-00 ~]# sort 2.txt |uniq -c
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff

8.12 tee_tr_split命令

tee命令 用于读取标准输入的数据,并将其内容输出成文件,并且打印到屏幕上。

参数:

  • -a:向文件中重定向时使用追加模式;
  • -i:忽略中断(interrupt)信号。

将文件排序去重后,输出成文件。

[root@liang-00 ~]# sort 2.txt |uniq -c |tee a.txt    #将2.txt排序去重后,输出到a.txt且打印出来。
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff
[root@liang-00 ~]# 

“>”后直接跟文件,表示清空该文件内容。

[root@liang-00 ~]# echo "aaaaaaaaaaaaa" > 1.txt    #在1.txt内写入内容
[root@liang-00 ~]# cat 1.txt 
aaaaaaaaaaaaa
[root@liang-00 ~]# > 1.txt    #清空1.txt里面的内容 
[root@liang-00 ~]# cat 1.txt 
[root@liang-00 ~]# 

-a选项,追加到输出文件内。

[root@liang-00 ~]# sort 2.txt |uniq -c |tee -a a.txt
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff
[root@liang-00 ~]# cat a.txt 
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff
[root@liang-00 ~]# 

tr命令 可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符。

参数:

  • -c或--complerment:取代所有不属于第一字符集的字符;
  • -d或--delete:删除所有属于第一字符集的字符;
  • -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
  • -t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。

将小写字符串改为大写。

[root@liang-00 ~]# echo "lianglinux" |tr '[l]' '[L]'    #将字符串中的“l”改为“L”。
LiangLinux
[root@liang-00 ~]# echo "lianglinux" |tr '[a-z]' '[A-Z]'    #将所有小写改为大写。
LIANGLINUX
[root@liang-00 ~]# echo "lianglinux" |tr '[a-zA-Z]' '1'    #将所有字母改为数字“1”。
1111111111
[root@liang-00 ~]# 

split命令 用于将一个文件分割成数个。该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。

参数:

  • -b:值为每一输出档案的大小,单位为 byte。
  • -C:每一输出档中,单行的最大 byte 数。
  • -d:使用数字作为后缀。
  • -l:值为每一输出档的列数大小。

对一个大小为248K的文件b.txt进行切割

[root@liang-00 test]# du -sh b.txt     
248K    b.txt
[root@liang-00 test]# split -b 1000 b.txt    #切割成大小为1000b(默认为b)的文件,文件名以x开头。
[root@liang-00 test]# ls
b.txt  xak  xav  xbg  xbr  xcc  xcn  xcy  xdj  xdu  xef  xeq  xfb  xfm  xfx  xgi  xgt  xhe  xhp  xia  xil  xiw  xjh
xaa    xal  xaw  xbh  xbs  xcd  xco  xcz  xdk  xdv  xeg  xer  xfc  xfn  xfy  xgj  xgu  xhf  xhq  xib  xim  xix  xji
xab    xam  xax  xbi  xbt  xce  xcp  xda  xdl  xdw  xeh  xes  xfd  xfo  xfz  xgk  xgv  xhg  xhr  xic  xin  xiy  xjj
xac    xan  xay  xbj  xbu  xcf  xcq  xdb  xdm  xdx  xei  xet  xfe  xfp  xga  xgl  xgw  xhh  xhs  xid  xio  xiz  xjk
xad    xao  xaz  xbk  xbv  xcg  xcr  xdc  xdn  xdy  xej  xeu  xff  xfq  xgb  xgm  xgx  xhi  xht  xie  xip  xja  xjl
xae    xap  xba  xbl  xbw  xch  xcs  xdd  xdo  xdz  xek  xev  xfg  xfr  xgc  xgn  xgy  xhj  xhu  xif  xiq  xjb  xjm
xaf    xaq  xbb  xbm  xbx  xci  xct  xde  xdp  xea  xel  xew  xfh  xfs  xgd  xgo  xgz  xhk  xhv  xig  xir  xjc  xjn
xag    xar  xbc  xbn  xby  xcj  xcu  xdf  xdq  xeb  xem  xex  xfi  xft  xge  xgp  xha  xhl  xhw  xih  xis  xjd  xjo
xah    xas  xbd  xbo  xbz  xck  xcv  xdg  xdr  xec  xen  xey  xfj  xfu  xgf  xgq  xhb  xhm  xhx  xii  xit  xje  xjp
xai    xat  xbe  xbp  xca  xcl  xcw  xdh  xds  xed  xeo  xez  xfk  xfv  xgg  xgr  xhc  xhn  xhy  xij  xiu  xjf  xjq
xaj    xau  xbf  xbq  xcb  xcm  xcx  xdi  xdt  xee  xep  xfa  xfl  xfw  xgh  xgs  xhd  xho  xhz  xik  xiv  xjg  xjr
[root@liang-00 test]# 

将切割后的文件自定义名字开头。

[root@liang-00 test]# split -b 100K b.txt a.    #以a.开头。
[root@liang-00 test]# ls
a.aa  a.ab  a.ac  b.txt

-l 指定行数多少。

[root@liang-00 test]# split -l 1000 b.txt    #每1000行切割成一个文件
[root@liang-00 test]# ls
b.txt  xaa  xab  xac  xad  xae  xaf  xag
[root@liang-00 test]# wc -l *    
  6365 b.txt
  1000 xaa
  1000 xab
  1000 xac
  1000 xad
  1000 xae
  1000 xaf
   365 xag
 12730 total
[root@liang-00 test]#

8.13 shell特殊符号

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

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

[root@liang-00 test]# ls b.txt ; du -sh xaa; wc -l xac    #执行多条命令用分号分割开
b.txt
40K    xaa
1000 xac
[root@liang-00 test]# 

~ 用户家目录,正则表达式里面表示匹配符。

& 放到命令后面,会把命令丢到后台。

> 输出重定向;>> 追加重定向;2>错误输出重定向;2>>错误输出追加重定向;&>不管错误还是正确都输出。

[] 指定字符中的一个,[1-9],[a-zA-Z],[abc]。

||和&&,用在命令之间。

 

|| 符号

用于两条命令之间,如果第一条命令执行成功就不执行第二条命令,如果第一条命令执行不成功就执行第二条命令。

[root@liang-00 test]# wc -l b.txt || ls xaa    #第一条命令执行成功了,没有执行第二条。
6365 b.txt
[root@liang-00 test]# cat  b1.txt || wc -l  xaa    #第一条没有执行成功,继续执行第二条。
cat: b1.txt: No such file or directory
1000 xaa
[root@liang-00 test]# 

&& 符号 

用于两条命令之间,如果第一条命令执行成功才去执行第二条命令,如果第一条命令执行不成功就不执行第二条命令。

[root@liang-00 test]# cat  b1.txt && wc -l  xaa    #第一条命令执行没成功,就不在执行第二条命令。
cat: b1.txt: No such file or directory
[root@liang-00 test]# ls  b.txt && wc -l  xaa    #第一条命令执行成功了,再执行第二条命令。
b.txt
1000 xaa
[root@liang-00 test]# 

|| 与 &&符号实际应用举例。

在系统中想要创建一个目录,但是不知道它存在不存在,如果存在了,就不去创建它,如果不存在再去创建它。

Linux 系统添加操作记录审计

       有时候我们需要对线上用户操作记录进行历史记录待出现问题追究责任人,,但Linux系统自带的history命令用户有自行删除权限,那怎么设置可以让用户的操作记录实时记录,并保证普通用户无权删除呢?本文教你一招。

[root@liang-00 ~]# mkdir -p /usr/local/domob/records/ 
[root@liang-00 ~]# chmod 777 /usr/local/domob/records/
[root@liang-00 ~]# chmod +t /usr/local/domob/records/
[root@liang-00 ~]# vim /etc/profile
[root@liang-00 ~]#

效果。

[root@liang-00 ~]# su - liang                            #切换到普通用户liang下。
Last login: Sun Nov  4 22:33:35 CST 2018 on pts/0
[liang@liang-00 ~]$ 
[liang@liang-00 ~]$ cd                                    #执行一些列操作
[liang@liang-00 ~]$ ls
[liang@liang-00 ~]$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   28G  2.1G   26G   8% /
devtmpfs                 480M     0  480M   0% /dev
tmpfs                    492M     0  492M   0% /dev/shm
tmpfs                    492M  7.5M  485M   2% /run
tmpfs                    492M     0  492M   0% /sys/fs/cgroup
/dev/sda1                197M  108M   90M  55% /boot
tmpfs                     99M     0   99M   0% /run/user/0
[liang@liang-00 ~]$ logout
[root@liang-00 ~]# cd /usr/local/domob/records/liang/
[root@liang-00 liang]# ls
bash_history                                                        #查看 /usr/local/domob/records/liang/ 下记录的 bash_history 
[root@liang-00 liang]# cat bash_history 
2018-11-07 00:09:46 ##### root pts/0 (192.168.37.1) #### su -
2018-11-07 00:09:48 ##### root pts/0 (192.168.37.1) #### su -
2018-11-07 00:09:49 ##### root pts/0 (192.168.37.1) #### cd
2018-11-07 00:09:50 ##### root pts/0 (192.168.37.1) #### ls
2018-11-07 00:10:01 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:02 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:02 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:02 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:03 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:03 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:03 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:03 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:04 ##### root pts/0 (192.168.37.1) #### df -h

 

撰写本博客所用到的参考文献:

http://man.linuxde.net
http://www.runoob.com/
http://www.68idc.cn/help/server/linux/2014042190951.html
http://ask.apelearn.com/question/5437

转载于:https://my.oschina.net/u/3993922/blog/2872731

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web前端开发这一领域是现代互联网行业中非常重要的一个职业岗位,负责将设计师设计的网站页面转化为实际可交互的网页。为了适应这个职业的要求,我进行了一段时间的预习,并整理了一些笔记。 首先,了解HTML(超文本标记语言)是十分重要的。它是构建网页结构的标准,可以通过标签定义不同的元素,如标题、段落、链接等。我学习了HTML的基本语法,如标签的使用规范、嵌套关系等。 其次,对CSS(层叠样式表)的理解也是必要的。通过CSS,我可以为HTML元素添加样式或者布局,使页面更加美观和易于阅读。我学习了CSS的选择器、属性和值,以及如何对文本、盒模型进行样式设置。 另外,JavaScript是实现网页交互性的重要一环。我了解了JavaScript的基本语法和DOM(文档对象模型),可以通过JavaScript操作网页元素,实现动态效果、表单验证等功能。 在学习的过程中,我还关注了响应式设计的概念。响应式设计可以使网页在不同设备上提供良好的用户体验,通过CSS媒体查询和弹性布局等技术,使页面适应不同的屏幕大小和分辨率。 此外,我还进行了一些实践练习,通过编写一些小项目来巩固所学知识。这些实践项目包括创建静态网页、制作简单的动画效果、实现表单验证等,帮助我理解和应用所学的技术。 综上所述,我的Web前端开发预习笔记主要包括HTML、CSS、JavaScript以及响应式设计的基础知识和实践经验。我相信这些准备工作可以为我之后的学习和工作打下良好的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值