• 正则表达式


    本系列的博客来自于:http://www.92csz.com/study/linux/

    在此,感谢原作者提供的入门知识

    这个系列的博客的目的在于将比较常用的liunx命令从作者的文章中摘录下来,供自己学习和复习之用。

    grep / egrep

    你要知道的是grep连同下面讲的sed, awk都是针对文本的行才操作的。

    语法: grep [-cinvABC] ‘word’ filename

    -c :打印符合要求的行数

    -i :忽略大小写

    -n :在输出符合要求的行的同时连同行号一起输出

    -v :打印不符合要求的行

    -A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行

    -B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行

    -C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行

    此处需要了解正则表达式

    sed 工具的使用】删除,修改不生效?

    grep 工具的功能其实还不够强大,其实说白了,grep实现的只是查找功能,而它却不能实现把查找的内容替换掉。以前用vim的时候,可以查找也可以替换,但是只局限于在文本内部来操作,而不能输出到屏幕上。sed工具以及下面要讲的awk工具就能实现把替换的文本输出到屏幕上的功能了,而且还有其他更丰富的功能。sed和awk都是流式编辑器,是针对文档的行来操作的。

    a. 打印某行 sed -n ‘n’p filename 单引号内的n是一个数字,表示第几行

    b. 打印多行 打印整个文档用 -n ‘1,$’p filename

    c. 打印包含某个字符串的行  sed -n '/word/'p filename

    d. -e 用来实现多个行为   sed -e '1'p -e '/111/'p -n filename   同时输出第一行,包含 111 的行

    e. 删除某行或者多行 sed '1'd filename sed '1,3'd filename sed '/oot/'d filename 

    另外还可以删除从某一行一直到文档末行 sed '3,$'d filename

    f. 替换字符或字符串 sed '1,2s/ot/to/g' filename ’s’就是替换的命令,’g’为本行中全局替换,如果不加’g’,只换该行中出现的第一个。

     除了可以使用’/’外,还可以使用其他特殊字符例如’#’或者’@’都没有问题。

    g. 调换两个字符串的位置

     sed 's/(bin)(.*)(sbin)/321/' test.txt 

    上例中用’()’把所想要替换的字符括起来成为一个整体,因为括号在sed中属于特殊符号,所以需要在前面加脱意字符’’,替换时则写成’1’, ‘2’, ‘3’ 的形式。

    笔者还常常用到在某一行前或者后增加指定内容。

     sed 's/^.*$/123&/' filename  在所有行前面增加123  

     sed 's/^.*$/&123/' filename  在所有行后面增加123  

    h. 直接修改文件的内容

    sed -i ‘s/:/#/g’ test.txt ,这样就可以直接更改test.txt文件中的内容了。

    【awk工具的使用】

    a. 截取文档中的某个段

    head -n2 test.txt  |awk -F':' '{print $1}'   

    -F 选项的作用是指定分隔符,如果不加-F指定,则以空格或者tab为分隔符。

    Print为打印的动作,用来打印出某个字段。$1为第一个字段,$2为第二个字段,依次类推,有一个特殊的那就是$0,它表示整行。

    print还可以打印自定义的内容,但是自定义的内容要用双引号括起来。({print $1"@"$2"@"$3})

    b. 匹配字符或字符串

     awk '/root/' filename

    还有比sed更强大的匹配

    awk -F':' '$5~/gopher/' filename 此处的~就是匹配的意思

    awk -F':' '/root/{print $3} /ftp/{print $3}' test.txt  awk还可以多次匹配,匹配完root,再匹配ftp

    c. 条件操作符

    awk中是可以用逻辑符号判断的,比如’==’就是等于,也可以理解为“精确匹配”。另外也有’>’, ‘>=’, ‘<’, ‘<=’, ‘!=’ 等等,值得注意的是,即使$3为数字,awk也不会把它当数字看待,它会认为是一个字符。所以不要妄图去拿$3当数字去和数字做比较

    cat test.txt |awk -F':' '$3>="8"' 

    d. awk的内置变量

    NF :用分隔符分隔后一共有多少段; cat test.txt |awk -F':' '{print NF}'

    $NF:表示最后一个分段的值   cat test.txt |awk -F':' '{print $NF}'

    NR :打印行数大于2的行   awk 'NR>2' test.txt

    e. awk中的数学运算

    赋值  cat test.txt |awk -F':' '$1="root"'

    加法  cat test.txt |awk -F':' '{$7=$3+$4;print $3,$4,$7}'

    计算某个字段的总和  cat test.txt |awk -F':' '{(total+=$3)};END{print total}'

    这里的END要注意一下,表示所有的行都已经执行,这是awk特有的语法,其实awk连同sed都可以写成一个脚本文件,而且有他们特有的语法,在awk中使用if判断、for循环都是可以的,只是笔者认为日常管理工作中没有必要使用那么复杂的语句而已。

    注意这里’( )’的使用。

  • 相关阅读:
    Linux目录操作
    图形库
    Mybatis两表连接(一对一)
    ssm图片上传到数据库
    ajax函数实例
    html、css基础
    HDU 1213 How Many Tables
    HTML5简介
    在script中创建标签的三种方式
    html css js jq问题总结
  • 原文地址:https://www.cnblogs.com/fred-chan/p/5124188.html
Copyright © 2020-2023  润新知