zoukankan      html  css  js  c++  java
  • Linux 比较重要且难掌握命令 集合

    1. find

    find path –option [-print] [-exec command] {} ;

    find . -maxdepth 1 -name aa
    find . -maxdepth 1 -perm 777
    find . -maxdepth 1 -user root
    find . -maxdepth 1 -group root
    find . -maxdepth 1 -mtime(atime, ctime) -4(+4, 4)( +4 4天以前, -4 4天以内, 4 刚好之前的第4天
    find . -nogroup
    find . -nouser
    find . -newer f1
    find . -type b/d/c/p/l/f   #块设备,目录,字符设备, 管道, 符号链接, 普通文件
    find . -maxdepth 1 -size +4096(4096, -4096) #+大于4096, -4096小于4096, 4096等于4096
    find . -name "*.txt"
    find . -name "[A-Z]*"
    find . -name "[a-z][a-z][0-9][0-9].txt" -print
    find . -type f -exec ls -l {} ;
    find . -mtime + 5 -exec rm -rf {} ; 等于 find . -mtime + 5 | xargs rm –rf

    grep 查找

    sed 编辑

    awk 数据分析, 可编程

    2. sed

    作用于 1 行

    sed    文本处理工具,本身是一个管道命令, 主要是以行为单位处理, 可以根据行    常用option:-n slient
            进行 替换, 删除, 新增, 选取 等工作    常用option: -f 直接将sed动作写在一个文档内 -f filename
            sed[-nefri] command 输入文本    常用option:  -i直接修改读取档案内容,而不是输出到屏幕
            例子:                       
            a 新增, c取代, d删除, i插入, p打印, s搭配正则表达式
            sed '2d' abc
            sed '2,$d' abc
            sed '/test/'d abc
            sed '1,2a asdf' abc
            sed '1,2s/old/new/g' abc
            sed 's/被替换内容/要替换内容/g' file (sed ‘1,20s/old/new/g’)

    sed本身也是一个管线命令,可以分析 standard input, 还可以将数据进行取代,删除,新增,截取特定行

    nl /etc/passwd | sed '2,5d' 删除2-5 行

    sed '2a drink tea' 增加新行

    nl /etc/passwd | sde '2,5c No 2-5 number' 替换

    nl /etc/passwd | sed -n '5,7p' 打印5-7行,安静模式

    sed '1,2c zz' test.txt

    nl test.txt | sed '1,2c zz'

    以上两种方法都可以替换

    同样,以下增加和删除还有 s级别替换也都可以类似以上两种方法

    sed '1,2d' test.txt

    sed '1,2a asdf' test.txt ( 在两行后边会增加 asdf, 显示的时候会另起一行,以方便查看,但实际上是在前两行末尾增加内容,而不是新增加行 ) 实际档案并未修改,只是显示时像修改

    sed '1,2s/old/new/g'

    sed [-nefr] [动作]

    -n : 使用安静(silent)模式,在一般 sed 的用法中,所有来自 stdin的数据一般都会被列出在屏幕上,但是如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。

    -e : 直接在指令列模式上进行 sed 的动作编辑

    -f : 直接将 sed 的动作卸载一个档案内, -f filename

    -r : sed 动作支持延伸正则表达式

    动作说明

    [n1,n2] function

    n1,n2 代表选择行, 有时候不存在, 例如 [10,20]

    function 代表动作:

    a 新增: 会在新行出现, 目前行的下一行

    c 取代 : 取代之前选中的行

    d 删除 :

    i 插入, 会在新行出现, 目前行的上一行

    p 打印, 通常 p 会参与 sed –n

    s 取代, 正则表达式 1,20s/old/new/g

    sed 可以直接修改档案, 不过这样一般比较危险

    sed –i ‘s/.$/!/g’ regular

    3. awk

    相比于 sed 作用于一行, awk 比较倾向于一行中分成数个【字段】.

    awk ‘条件类型1{动作1}条件类型2{动作2}…’ filename 比较常用

    awk 可以直接处理后续档案, 也可以读取来自指令的 standard output

    last –n 5 | awk ‘{print $1 “ ” $3}’

    1. 读入第一行, 并将第一行的资料填入 $0, $1, $2… 等变量中

    2. 依据”条件类型”的限制, 判断是否进行后面的”动作”

    3. 做完所有的动作与条件类型;

    4. 若还有后续的行, 重复上边1~3的步骤, 直到所有数据都读完.

    内置变量

    NF 每一行的字段总数

    NR 目前awk 所处理的是第几行

    FS 目前的分隔符, 默认是空格键

    last –n 5 | awk ‘{print $1 “ lines:” NR “ columes:” NF}’

    awk 逻辑运算符

    > >= < <= == !=

    cat /etc/passwd | awk ‘BEGIN{FS=”:”}$3 < 10{print $1 “ ” $3}’

    cat pay.txt | awk ‘NR ==1 {printf “%10s 10%s %10s %10s ”, $1,$2,$3,$4, “Total”}

    NR >= 2 {total = $2 + $3 + $5 printf”%10s %10d %10d %10.2f ”, $1, $2, $3, $5, total}’

    cat pay.txt | awk ‘{if(NR==1) printf“%10s 10%s %10s %10s ”, $1,$2,$3,$4, “Total”} NR>=2{printf ”%10s %10d %10d %10.2f ”, $1, $2, $3, $5, total}’

    awk    使用方法    awk '{pattern + action}' {filenames}           
        调用方式 3 种    1. 命令行 awk [-F field-separator] 'command' imput-files            
                         2. awk 脚本 这种可以把所有的awk命令放到一个文件中, 并把文件头改为 #!/bin/awk            
                         3. 将所有的 awk 命令插入到一个单独文件, 然后调用. Awk -f awk-script-file input-files            
                         last -n 5 | awk '{print $1}'           
        流程             读入有' '换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。

    默认域分隔符是"空白键" 或 "[tab]键".            
                         cat /etc/passwd |awk  -F ':'  '{print $1" "$7}'            
                         cat /etc/passwd |awk -F ':' ' BEGIN{print "name,shell"} {print $1","$7} END {print "blue, /bin/nosh"}'           
        流程             先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,

    $0则表示所有域,$1表示第一个域,$n表示第n个域,            
                         随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。            
                         awk -F ':' '/root/' /etc/passwd  搜索包含 root 的行, 支持正则表达式           
        awk 编程         用; 分隔执行语句    awk '{count++; print &0;} END{print "user count is", count}' /etc/passwd           
        编程借鉴了c语言的, if语句, for循环 等等       

  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3482243.html
Copyright © 2011-2022 走看看