【测试开发】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,//里面是正则-
- a :新增, 某行后面新增一行,例如
-i参数直接修改文件内容,例如sed -i 's/old/new/g' test.txt
awk命令
- 把文件逐行读入,以空格为默认分割符将每行切片,切分成不同的列,切开的列再进行后续处理
- $0是读取的整行内容,$1是第一列
- awk 'pattern + action' filenames,pattern就是正则表达式,action对匹配到的内容执行的命令(默认为输出每行内容)
-Ffs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:-vvar=value:赋值一个用户定义变量,将外部变量传递给awk-fscripfile:从脚本文件中读取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
浙公网安备 33010602011771号