【测试开发】4-Linux三剑客与管道

管道符|

  • 管道符将两个命令隔开,管道符左边命令的输出作为管道符右边命令的输入

grep命令

  • 对文件中的行进行正则匹配过滤

  • grep [option] pattern file

  • 正则表达式

    • 记录文本规则的代码,正则表达式匹配文本中的字符串
    • 常用的元字符
      • . 匹配除换行符以外的任意字符
      • \w 匹配字母或者数字或下划线或汉字
      • \s 匹配任意空白符
      • \d 匹配数字
      • \b 匹配单词的开始或结束
      • ^ 匹配字符串的开始
      • $ 匹配字符串的结束
    • 常用的限定符
      • * 重复零次或更多次
      • + 重复一次或更多次
      • ? 重复零次或一次
      • {n} 重复n次
      • {n,} 重复n次或更多次
      • {n,m} 重复n到m次
  • 常用参数

    • -v 显示不被模式匹配的行

    • -i 忽略字符大小写

    • -n 显示匹配的行号

    • -c 统计匹配的行数

    • -o 仅显示匹配到的字符串

    • -E
      

      使用ERE,相当于egrep

      • 基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符(meta charactor)的区别而已
      • BRE: 只有^$.*[]是元字符
      • ERE: ^$.[]*+(){}?|都是元字符

sed命令

  • 对文件中的行进行流编辑,不会影响原有的文件内容
  • sed [-hnV][-e(script)][-f(script文件)][文本文件]
    • -e(script)或--expression=(script) 以选项中指定的script来处理输入的文本文件。
    • -f(script文件)或--file=(script文件) 以选项中指定的script文件来处理输入的文本文件。
    • -h或--help 显示帮助。
    • -n或--quiet或--silent 仅显示script处理后的结果。
    • -V或--version 显示版本信息
  • script动作说明
    • a :新增, 某行后面新增一行,例如sed -e '4a newline' test.txt
    • i :插入, 某行前面新增一行,例如sed -e '4i newline' test.txt
    • c :取代, 可以取代n1,n2之间的行,例如sed -e '4,6c oldline\newline' test.txt
    • s :取代,可以搭配正则,例如sed -e '1,20s/old/new/g' test.txt,/g表示全局替换,不加/g表示替换每一行中的第一个匹配到的字符串
    • d :删除,可以取代n1,n2之间的行,例如sed -e '4,6d' test.txt
    • p :打印,将某个选择的数据印出,通常p会与参数 sed -n一起运行,例如sed -n '/root/p' test.txt,//里面是正则-
  • -i参数直接修改文件内容,例如sed -i 's/old/new/g' test.txt

awk命令

  • 把文件逐行读入,以空格为默认分割符将每行切片,切分成不同的列,切开的列再进行后续处理
  • $0是读取的整行内容,$1是第一列
  • awk 'pattern + action' filenames,pattern就是正则表达式,action对匹配到的内容执行的命令(默认为输出每行内容)
    • -F fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
    • -v var=value:赋值一个用户定义变量,将外部变量传递给awk
    • -f scripfile:从脚本文件中读取awk命令
  • 内置变量
    • FILENAME awk浏览的文件名

    • BEGIN 处理文本前要执行的操作

    • END 处理文本后要执行的操作

    • FS 输入列分隔符,等价于-F,默认为空白字符

    • OFS 输出列分隔符,默认为空白字符

    • RS 输入行分割符,指定输入时的换行符,原换行符仍有效

    • ORS 输出行分割符,输出时用指定符号代替换行符

    • NF 列数,$NF引用最后一列,$(NF-1)引用倒数第2列

    • NR 行数

    • $0 整条行内容

    • $1 表示当前第一列

参考实例

打印每一行的第二和第三个字段:

[root@linuxcool ~]# awk '{ print $2,$3 }' file 

修改输出分隔符号,特殊字符需转义:

[root@linuxcool ~]# awk -v OFS="~"'{print $1,$NF}'  

以特定格式输出passwd字符:

[root@linuxcool ~]# awk -F: '{printf "%-15s->%10s ->%20s\n",$1,$(NF-3),$NF}' /etc/passwd|head -2  

打印系统上uid大于等于500且以m开头的行的首字段:

[root@linuxcool ~]# awk -F: '$3>=500 && $1 ~ /^m/{print $1}' /etc/passwd 

第三个字段有0的打印,和仅为0的,模糊匹配和精确匹配:

[root@linuxcool ~]# awk -F: '$3~0{print}' /etc/passwd 
posted @ 2020-11-22 21:01  测试路漫漫  阅读(114)  评论(0)    收藏  举报