美文网首页
linux命令

linux命令

作者: Phoebe_Liu | 来源:发表于2018-12-04 19:29 被阅读0次

    uniq (检测 相邻行的 重复行) 常和sort连用

    -c, --count //在每行前加上表示相应行目出现次数的前缀编号
    -d, --repeated //只显示重复的
    -u, --unique // 只显示不重复的
    -D, --all-repeated // 打印所有重复行
    -i, --ignore-case //不区分大小写
    -f, --skip-fields=N //-f 忽略的段数,-f 1 忽略第一段
    -s, --skip-chars=N //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符

    sort

    -u 它的作用很简单,就是在输出行中去除重复行
    -o 把结果输出到源文件
    -n 指明以数值来排序
    -r 默认升序,降序
    -t 指明分隔符号
    -k 指明使用哪一列 排序
    例如:
    文件date.txt如下:
    2017-01-09
    2017-01-09
    2017-04-24
    2017-10-23
    2017-12-02

    sort -u -nr -k 2 -t '-' -o out.txt

    grep

    -c 计数
    -E 拓展的正则表达式(位置锚定、匹配次数)
    -i 忽略大小写
    -l 列出文件名
    -n 列出行号
    -v 显示不匹配
    -o 仅显示匹配到的字符串

    下面是grep里正则匹配的要点:

    [:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
    

    匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式

    * :匹配前面的字符任意次,包括0次
    .* :任意长度的任意字符
    \? :匹配其前面的字符0或1次
    \+ :匹配其前面的字符至少1次,但不需要紧随在第一次后面
    \{m\} :匹配前面的字符m次
    \{m,n\} :匹配前面的字符至少m次,至多n次
    \{,n\} :匹配前面的字符至多n次
    <=n次
    \{m,\} :匹配前面的字符至少m次
    

    位置锚定:定位出现的位置

    ^ :行首锚定,用于模式的最左侧
    $ :行尾锚定,用于模式的最右侧
    ^PATTERN$: 用于模式匹配整行
    ^$: 空行
    ^[[:space:]]*$ :空白行或包含tab字符的行
    \< 或 \b :词首锚定,用于单词模式的左侧
    \> 或 \b :词尾锚定;用于单词模式的右侧
    注意:在grep中,字母和数字的组合也被视为单词
    \<PATTERN\>:锚定以PATTERN表达式做为单词的行  
    

    例子:

    1、显示/etc/passwd 文件中不以/bin/bash 结尾的行
    grep -v "/bin/bash$" /etc/passwd
    2 、显示用户rpc 默认的shell 程序
    grep "^rpc\>" /etc/passwd | cut -d: -f7
    3 、找出/etc/passwd 中的两位或三位数
    grep -E "\<[0-9]{2,3}\>" /etc/passwd
    4 、找出"netstat -tan" 命令的结果中以'LISTEN' 后跟0 、1或多个空白字符结尾的行
    netstat -tan | grep "\<LISTEN[[:space:]]*$"
    5、 显示包含ed或者at字符的内容行
    cat test.txt |grep -E "ed|at"
    

    awk 格式化文本信息

    awk '{pattern + action}' {filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令
    ' ' 引用代码块
    {} 命令代码块,包含一条或多条命令
    -F 指定分隔符
    $0 表示整个当前行
    $1 每行第一个字段
    $2 每行第二个字段
    ; 多条命令使用分号分隔
    NF 当前列num
    NR 当前行num
    BEGING END awk会先执行BEGIN;然后读取文件,直到所有的记录都读完;最后执行END操作
    例子:

    awk -F":" '{print $1 $3}'  /etc/passwd                       //$1与$3相连输出,不分隔
    awk -F":" '{print $1,$3}'  /etc/passwd                       //多了一个逗号,$1与$3使用空格分隔
    awk -F":" '{print $1 " " $3}'  /etc/passwd                  //$1与$3之间手动添加空格分隔
    awk -F: '{print $1; print $2}'   /etc/passwd                   //将每一行的前二个字段,分行输出,进一步理解一行一行处理文本
     awk -F: 'NF==4 {print }' /etc/passwd                       //显示只有4个字段的行
    awk -F: 'NF>2{print $0}' /etc/passwd                       //显示每行字段数量大于2的行
    awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd      //依次打印行号,字段数,最后字段值,制表符,每行内容
    

    同时, awk可以按照正则进行匹配,配上上的,按照格式要求 输出
    正则用/reg/框起来
    例如:

    awk '/^$/{print "this is an empty line"}' /etc/inittab  //查找空行,并且输出这是个空行
    awk -F: '/^root/{print $1,$NF}'  // 查找以root开头的行,并且输出第一个字段、最后一个字段
    awk -F: '!/^root/{print $1,$NF}'  // 查找不是root开头的行,并且输出第一个字段、最后一个字段
    
    

    sed 流编辑工具,默认会处理文件的所有行,除非你告诉它不处理哪几行,适合处理大数据文件

    sed [选项] [定址commands] [inputfile]
    p 打印行
    n 关闭默认输出,默认将自动打印所有行。一般来讲 -n 和 p连用,才能把满足要求的行打印
    d 删除行
    s 替换
    n替换第几个匹内容
    w另存为
    a 之后添加一行
    i 当前行之前插入文本
    y 替换匹配内容
    e 多点编辑
    r 正则 正则用/reg/框起来

    sed -n -r '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt  输出满足这个正则的行
    sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt   // 将第一行-第三行中,所有的my替换成your, This替换成That
    sed "3,6s/my/your/g" pets.txt // 只替换第3到第6行的文本
    sed 's/s/S/3g' my.txt //替换每一行的第3个以后的
    sed 's/s/S/2' my.txt //替换每一行的第二个s
    

    cut

    使用说明:
    cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
    如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
    参数:
    -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
    -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
    范围之内,该字符将被写出;否则,该字符将被排除
    -c :以字符为单位进行分割。
    -d :自定义分隔符,默认为制表符。
    -f :与-d一起使用,指定显示哪个区域。例如: cat /etc/password | cut -d : -f 1

    相关文章

      网友评论

          本文标题:linux命令

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