美文网首页
基本指令使用

基本指令使用

作者: funOfFan | 来源:发表于2020-01-29 21:48 被阅读0次

基本命令的使用

用cat进行拼接

  • 用cat指令将标准输入和输入文件file.txt的内容拼接在一起,-被作为来自stdin文本的文件名。
    echo 'Text through stdin' | cat - file.txt
    
  • 读取file.txt文件中的内容,并将文本中多个连续的空白行压缩成一个空白行。
    cat -s file.txt
    
  • 使用cat指令,将制表符显示为^|,在python文件读取时,用处比较大。
    cat -T file.py 
    
  • 在cat的输出内容中,添加行序号
    cat -n lines.txt
    

录制和回放终端会话

  • 录制终端会话,并生成记录文件.-t选项将时序数据导入stderr,而后将stderr重定向到timing.log中,-a选项将指令执行的输出记录到指定文件output.session中。
     script -t 2> timing.log -a output.session
     type commands;
     ...
     ...
     exit
    
  • 借助时序数据文件、指令输出数据文件,回放指令执行过程
    scriptreplay timing.log output.session  
    
  • 借助script、scriptreplay指令,实现指令实时广播
    #启动两终端广播
    Terminal_1: mkfifo scriptfifo
    Terminal_2: cat scriptfifo
    Terminal_1: script -f scriptfifo
    # 广播过程启动完毕,Terminal_1是广播员,Terminal_2作为听众
    #Terminal_1上的任何指令操作,在Terminal_2上都会同步播放
    #此情况下,任何运行指令cat scriptfifo的终端都可以作为听众
    
    #结束两终端广播
    Terminal_1: exit
    

文件查找与文件列表

  • 列出当前目录和子目录下所有文件以及文件夹
    find base_path -print
    #从base_path位置开始向下查找
    #-print选项指明打印出匹配文件的文件名,并将\n作为分隔文件的定界符
    #-print0选项将\0作为分隔符,适用于文件名中包含换行符的时候
    
  • 根据文件名或者正则表达式匹配搜索
    find /home/fmr -name "*.txt" -print
    find /home/fmr -iname "*.py" -print0
    #-name选项指定了文件名必须匹配的字符串,可以将通配符作为参数使用
    #-iname选项类似-name选项,只不过会忽略字母大小写
    
    find /home/fmr -path "*flinux*" -print
    #-path选项会将文件路径作为一个整体进行匹配,而不单单是文件名
    
    find . \(-name "*.txt" -o -name "*.pdf"\) -print
    #使用or操作,匹配多个条件中的一个
    
  • 否定参数的使用
    find . ! -name "*.txt" -print
    #匹配所有不以txt结尾的文件名
    
  • 基于目录深度、文件类型的搜索
    find . -mindepth 2 -type f -print
    find . -maxdepth 3 -type f -print
    #-maxdepth参数指定最深查找到第几层
    #-mindepth参数指定从第几层开始查找
    #-type参数指定查找什么类型的文件,f表示普通文件
    #先设置查找深度,再设置查找文件的类型,提高find执行效率
    
  • 根据文件时间进行检索
    #以“天”为计量单位
    #访问时间 -atime 用户最近一次访问文件的时间
    #修改时间 -mtime 文件内容最后一次被修改的时间
    #变化时间 -ctime 文件元数据(权限或所有权)最后一次改变的时间
    
    #以“分钟”为计量单位
    #-amin 访问时间
    #-mmin 修改时间
    #-cmin 变化时间
    find . -type f -atime -7 -print
    #打印出在最近7天内被访问过的文件
    find . -type f -atime 7 -print
    #打印出恰好在7天前被访问过的文件
    find . -type f -atime +7 -print
    #打印出访问时间超过7天的所有文件
    
  • 基于文件大小进行搜索
    find . -type f -size +7k
    #查找大于7k的文件
    find . -type f -size -2k
    #查找小于2k的文件
    find . -type f -size 2k
    #查找大小为2k的文件
    
  • 删除匹配的文件, -delete选项
    find . -type f -name "*.swp" -delete
    #删除当前目录下的所有.swp文件
    
  • 基于文件权限、文件所有权进行匹配
    find . -type f -perm 644 -print
    #打印出权限为644的文件
    find . -type f -user fmr -print
    #打印出用户fmr所拥有的文件
    
  • 结合find指令执行命令或者动作, -exec选项
    sudo find . -type f -user root -exec chown fmr {} \;
    #查找当前目录下,root用户拥有的文件,并将拥有者改为fmr
    #对于每一个匹配的文件,{}会被替换成相应的文件名
    

xargs指令的使用

  • 一般情况下,指令的连续使用是这样的
    cat foo.txt | grep "test"
    # 将前一个指令的stdout重定向到另一个指令的stdin
    
    但是有些指令只能以命令行参数的形式接受数据,无法通过stdin接受数据流,就需要有一个工具可以将标准输入数据转换成命令行参数,这恰恰是xargs指令的作用。
  • xargs指令会把从stdin收到的数据重新格式化,再将其作为参数提取给其他指令使用。
    #将多行输入转换成单行并输出
    cat example.txt
    1 2 3 4 5 6
    7 8 9 10
    11 12
    
    cat example.txt | xargs
    1 2 3 4 5 6 7 8 9 10 11 12
    
    #将单行输入转换成多行输出
    #xargs指令的-n选项,可以指定转换后每行最大的参数数量
    cat example.txt | xargs -n 3
    1 2 3 
    4 5 6 
    7 8 9
    10 11 12
    
    #使用-d选项输入一个自定义的定界符
    echo "splitXsplitXsplitXsplitXsplit" | xargs -d X
    split split split split split
    
  • xargs指令的特殊使用方法
    cat args.txt #范例文件
    arg1
    arg2
    arg3
    
    cat args.txt | xargs -I {} more -p {} -l
    # 这条指令实际上的运行效果如下:
    # more -p arg1 -l
    # more -p arg2 -l
    # more -p arg3 -l
    # -I指定了一个替换字符串{},这个字符串在xargs执行时候会被替换掉。
    # 字符串{}会被从stdin读取到的参数所替换。
    # {}在每次执行中会被替换为相应的参数。
    
    # 结合find使用xargs
    find . -type f -name "*.txt" -print | xargs -0 rm -f
    # 查找当前目录下所有txt文件,\0作为find指令输出结果的定界符。
    
    # 统计当前目录下,C程序文件的行数
    find . -type f -name "*.c" -print0 | xargs -0 wc -l
    

tr转换指令的使用

  • 实现大小写转换
    echo "HELLO WHO IS THIS " | tr 'A-Z' 'a-z'
    ## 可以使用起始字符-终止字符这种格式,
    ## 如果起始字符-终止字符不是一个连续的字符序列,
    ## 那么它就会被视为一个包含了三个元素的集合(起始字符-终止字符)。
    
  • 使用tr指令将指定文本中的制表符转换成空格
    cat file_name.txt | tr '\t' ' '
  • 使用tr删除字符
    echo "Hello 123 world 456" | tr -d '0-9'
    
  • cat file_name.txt | tr -s ' '
    ## 压缩file_name文件中的空格字符 
    

排序、单一与重复

  • sort指令既可以从stdin中获取输入,也可以从特定的文件读取,并将排序后的结果写入stdout。
    ## 对一组文件进行排序
    ## 并找出已排序文件中的不重复的行
    sort file1.txt file2.txt -o sorted.txt
    cat sorted.txt | uniq > uniq_linex.txt
    
  • 使用sort指令按照数字顺序的逆序进行排序
    sort -n -r sorted.txt
    
  • 使用sort指令,按照列进行排序
    sort -nrk 1 data.txt
    ## 按照data.txt文件的第一列数据的数字逆序,
    ## 进行排序,排序结果写入stdout。
    
  • uniq指令的使用
    ## 统计各行在文件中出现的次数
    sort data.txt | uniq -c
    ## 找出并输出文件中重复的行
    sort data.txt | uniq -d
    ## -s跳过前2个字符、-w指定用于比较的最大字符数为2
    sort data.txt | uniq -s 2 -w 2
    
  • 需要注意的是,当我们将uniq指令的输出作为xargs指令的输入的时候,最好为输出的各行添加一个0值字节终止符。默认情况下,xargs指令使用空格作为定界符,来分割参数。例如说,来自stdin的文本行"this is a lline"在默认情况下,会被xargs当作4个不同的参数,但是实际上它只是一个单行,如果在上一个uniq指令中为每一行末尾添加0值字节终止符,再使用xargs -0,就可以以\0为定界符,这样一来,包含空格的单行就可以被正确的解析为单个参数
    uniq -z file.txt | xargs -0 rm
    ## 删除在file.txt中指定文件名的文件
    

临时文件名和随机数的使用

  • temp_file=$(tempfile)
    ## 为变量tempfile赋值一个临时文件夹名称
    ## 而环境变量$RANDOM总是返回一个随机数
    
    temp_file="/tmp/var.$$"
    ## .$$会被扩展成当前运行脚本的进程ID
    

分割文件和数据

  • split -b 10k data.file -d -a 4
    ## -b选项指定了每个小文件的大小
    ## -d选项指定将数字作为小文件后缀
    ## -a选项指定后缀名的长度为4位
    

根据扩展名切分文件名

  • ## 借助%操作符,可以将名称部分从“名称.扩展名”这种格式的文件名中提取出来。
    file_jpg="sample.jpg"
    name=${file_jpg%.*}
    
    ## 借助#操作符,可以将扩展名从“名称.扩展名”格式的文件名中提取出来。
    file_jpg="sample.jpg"
    extension=${file_jpg#*.}
    
  • ${VAR%.*}
    ## 从$VAR中删除位于%右侧的通配符所匹配的字符串,从右向左匹配。
    ## 给VAR赋值,通配符从右向左匹配,会匹配到扩展名。
    ## 匹配到扩展名后,从$VAR中删除匹配结果,得到文件名。
    ## %属于非贪婪操作,从右向左找出匹配的最短结果。
    ## %%与%功能一致,但却是贪婪匹配,会匹配i符合条件的最长字符串。
    ## #与##也有类似的效果。
    

相关文章

  • 基本指令使用

    基本命令的使用 用cat进行拼接 用cat指令将标准输入和输入文件file.txt的内容拼接在一起,-被作为来自s...

  • git远程仓库关联

    一.GitHub常用指令 git的基本使用指令:git init ...

  • 01Vue基本使用与模板语法

    Vue基本使用与模板语法 一. 基本使用 Hello World快速入门 二. 模板语法 指令 概述 指令的本质就...

  • git基本指令使用

    Git上传coding.net代码仓库详解 起步 1,生成ssh 此处默认已经下载安装好了Git。(下载步骤为傻瓜...

  • Vue基本指令使用

    1.渲染数据指令 vue的指令directive只是dom的行间属性,vue给这类属性赋予了一定的意义, 来实现特...

  • Linux高级命令详解【乐搏TestPRO】

    前面讲过了Linux基本指令的使用,请参考Linux基本指令详解,接下来我们来学习下Linux的高级指令之文本处理...

  • 第九节:Vue指令:v-if条件判断

    1.v-if指令 v-if指令是用来控制元素的切换显示 1.1 条件判断指令的基本使用 1.1.1 v-if 指令...

  • 初识git,用git 上传项目到GitHub

    分享一些git基本指令,不喜勿喷! git的基本使用指令 git init 初始化git仓库 git add . ...

  • git的基本使用指令

    git clone 将代码从git上clone到本地,形成数据仓库。 git fetch 将git上别人已经修改好...

  • Vue基本指令的使用

    v-cloak(插值表达式) 使用v-cloak能够解决插值表达式的闪烁问题 如: {{ msg }} ,在Vue...

网友评论

      本文标题:基本指令使用

      本文链接:https://www.haomeiwen.com/subject/hwubthtx.html