简单介绍linux三大命令grep、awk、sed

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注