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循环 等等       

  • 相关阅读:
    下载程序的疑问
    Beaglebone环境建立:电源适配器供电+网线ssh
    Android百分比布局支持库介绍——com.android.support:percent
    android应用中去掉标题栏的方法
    自己写的进度条
    返回图片指定点的RGB值
    修改指定图片的分辨率
    跨域访问的问题和解决过程
    C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher
    Sql Server字符串函数
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3482243.html
Copyright © 2011-2022 走看看