zoukankan      html  css  js  c++  java
  • 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下

    [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这个文件。

  • 相关阅读:
    元学习Meta Learning/Learning to learn
    TRAINING A CLASSIFIER训练分类器(pytorch官网60分钟闪电战第四节)
    NEURAL NETWORKS神经网络(pytorch官网60分钟闪电战第三节)
    AUTOGRAD: 自动分化(pytorch官网60分钟闪电战第二节)
    WHAT IS PYTORCH?(pytorch官网60分钟闪电战第一节)
    windows找不到gpedit.msc
    The “freeze_support()“ line can be omitted if the program is not going to be frozen to produ
    torch.mul() 和 torch.mm() 的区别
    vue面试题(2)
    JS输出题练习
  • 原文地址:https://www.cnblogs.com/sisul/p/8277950.html
Copyright © 2011-2022 走看看