grep、awk、sed是linux系列机器里面非常常用的命令。这里就给大家简单介绍下这些命令的常用参数。
grep
grep是用来在文件里搜索东西的,来源于Global Regular Expression Print,通过完成的英文来看,应该可以想到他是通过正则来匹配的。而不只是简单的查找文本。
使用示例:
# 查找出包含test的行,引号可以省略
grep 'test' file.txt
可选参数:
-E / -P: Use extended / Perl compatible regular expression syntax.(使用拓展的或者Perl正则符号来匹配)
-n: Show line number before each line.(在匹配到的每一行的前面实现行号)
-o: Only show the matching segment of the line.(只显示匹配到的字符)
-v: Print all of the lines that DO NOT match the search pattern.(显示出不包含指定正则的行内容,ps:可以进行二次过滤)
-c: Show the number of the lines that contains the search pattern.(输出每行匹配指定正则得到结果的总条数)
-i: Ignore case.(不区分大小写)
一般可以这样用$ grep ERROR error.log | grep -v '想要过滤掉的错误内容'
awk
awk也可以查找文件,但是同时还有处理信息的功能。这个命令的发明者是:Aho, Weinberger & Kernighan,所以这个命令的缩写很奇怪,哈哈。这个命令一般可以用来输出报告,比如csv文件什么的。
awk有三种用法:
1、最普通的一种
BEGIN { ... initialization awk commands ...}
{ ... awk commands for each line of the file ...}
END { ... finalization awk commands ...}
这里BEGIN和END是可以省略的
2、控制流(有下面这好几种)
if (condition) statement [ else statement ]
while (condition) statement
do statement while (condition)
for (expr1; expr2; expr3) statement
for (var in array) statement
break
continue
exit [ expression ]
3、内建变量
变量 | 意思 |
$0 | 当前行 |
$1 - $n | 第n行 |
FS | 输入的数据的列分隔符(field separator),默认是空格 |
NF | 列、字段的数量(列数) |
NR | 记录、行的数量(行数) |
FNR | The number of records relative to the current input file(这句没看懂,看懂的给翻译下) |
OFS | 输出字段(列)的分隔符,默认空格 |
ORS | 输入行的分隔符,默认\n |
使用示例:
1、一般用法:
# 输出第一列和第四列的字段
awk '{print $1, $4}' file.txt
# 就和 'cat file.txt' 一样了
awk '{print $0}' file.txt
2、-F:设置输入文本的字段分隔符
# 设置分隔符为“:”,然后输出第一列和第四列内容
awk -F: '{print $1, $4}' file.txt
# 上面的语句也可以这样写
awk 'BEGIN {FS = ":"} {print $1, $4}' file.txt
3、模式匹配
# 当第一列内容为test时,输出第二列内容
awk '$1 == "test" { print $2 }' file.txt
# 当第一列内容包含test时,输出第二列内容
awk '$1 ~ /test/ { print $2 }' file.txt
# 当第一列内容不包含test时,输出第二列内容
awk '$1 !~ /test/ { print $2 }' file.txt
# 当一行的内容包含test时,输出该行的第二列内容
awk '/test/ { print $2 }' file.txt
# 当一行的内容不包含test时,输出该行的第二列内容
awk '! /test/ { print $2 }' file.txt
sed
sed的英文全称是Stream Editor,它可以在给定的文件中进行文本替换。这里需要说明的是,这个替换默认情况并不会写会输入的文件,只会打印出来。
使用示例:
1、打印一行:p
#把它当作 'grep' 来用
# 命令相当于 'cat file.txt'
sed '' file.txt
# 匹配每一行,输出符合正则的行
sed -n '/test/p' file.txt
# 同时匹配多个正则
sed -n '/test1/, /test2/p' file.txt
2、删除一行:d
# 删除匹配正则的每一行
sed '/test/d' file.txt
# 删除文件的第二行
sed '2d' file.txt
# 删除文件的第二行到最后一行
sed '2,$d' file.txt
3、替换: s(Substitution)
# 把每一行中第一个test替换成text
sed 's/test/text/' file.txt
# 把每一行中所有的test都替换成text
sed 's/test/text/g' file.txt
# 把每一行中第二个test替换成text
sed 's/test/text/2' file.txt
# 把每一行中第二个到最后一个test替换成text
sed 's/test/text/2g' file.txt
# 把第二行的所有test替换成text
sed '2s/test/text/g' file.txt
4、插入(Insert)或者追加(Append)一个新行:i&a
# 在第二行前插入一个新行,内容是test
sed '2 i test' file.txt
# 在第二行后追加一个新行,内容是test
sed '2 a test' file.txt
# 在匹配的每一行后面追加一行,内容是test
sed '/test/a test' file.txt
5、替换完整的一行:c
# 把第二行替换为test
sed '2 c test' file.txt
# 匹配所有满足正则的行,替换为test
sed '/test/c text' file.txt
6、立刻替换:-i
# 立刻替换
sed -i '2 c test' file.txt
只是一些简单的用法,当然这些都是可以配合管道的。转载注明 赵伊凡BLOG
点击去看个pdf,比较完整。
©原创文章,转载请注明来源: 赵伊凡's Blog
©本文链接地址: 简单介绍linux三大命令grep、awk、sed