find、grep、sed、awk的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find、grep、sed、awk的使用相关的知识,希望对你有一定的参考价值。

参考技术A 一 、find
基本概念: find是一款文件搜索工具。

多文件名匹配:

找出/var/log下7天前的日志并压缩存储在/work下,要求包名为当天日期

二、grep的用法
grep支持通配
常用方法:
1.grep "^####" zabbix_server.conf 匹配文件中指定匹配规则的字符串

2.输出匹配行的前后几行
grep "^####" zabbix_server.conf -C 3
3.结合tr实现大小写字母转换

4.实现既输出匹配路径又显示匹配结果

5.[root@localhost test]# grep ":" zabbix_server.conf | cut -d : -f 2
cut的用法:
-d 以什么来分割
-f 取分割后的第几段
取出最后登录系统的用户信息

6.正则表达式回文结构12321/zabaz
grep -w -e '(.)(.).\2\1' file

7.grep -E 扩展正则表达式
grep -E 'l1,2' zabbix_server.conf
匹配文件中l字母最小连续出现1次,最多连续出现2次

grep选项:
-i:忽略字符的大小写
-o:仅显示匹配到的字符串本身
-v:显示不被模式匹配到的行
-E:支持使用扩展的正则表达式
-C #:显示被模式匹配的行及其前后各#行(A前B后)

------------------------------------------------------------------------------------------------------------三、sed的用法
sed [options] script filename

工作流程:

上图所示过程读取文件到模式空间--->匹配模式空间文件里一行内容--->匹配成功执行输出或执行sed 'cmd1;cmd2;cmd3' /filepath---->执行成功丢弃或没匹配上丢弃,读取模式空间下一行

script可以是脚本或地址定界
地址定界 sed ‘/pattern编辑命令/’ /filepath

选项:
-n:不输出模式空间里的内容,仅输出匹配到的内容
-e:多个script
-f:从指定文件中读取编辑脚本
编辑命令:
p:不输出模式空间里的内容
d:删除
$:最后一行
1.sed -n '1,3p' /etc/passwd
匹配第1行至第三行不输出模式空间里的内容

2.匹配root开头的行
sed -n '/^root/'p /etc/passwd

3.多点编辑
sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab

4.从指定文件中读取编辑脚本
写入脚本 echo "1,3p" > sed_sh.txt
sed -n -f sed_sh.txt /etc/passwd

5.$的使用
sed -n '$p' /etc/passwd

6.#,+#用法
第二行行后面加五行 sed -n '2,+5p' /etc/passwd

7.双pattern模式
从pat1模式匹配到的行至pat2匹配到的行

s/ 要替换的字符/替换成的字符/标记:查找替换,其分隔符可自行指定,常用的有s@@@, s###
替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;

四、awk的用法
awk [option] 'patterncommend' /filepass

6.自定义变量及BEGIN和END

7.printf的format及条件表达式:条件?为真的操作:为假的操作

8.awk支持函数调用和条件语句

9.引用于 骏马金龙博客 点击进入

在上面的语句中,var123不能在BEGIN中使用,当awk执行完BEGIN程序后,准备读取主输入,于是开始解析program后的输入文件。解析时发现,var1和var2都是赋值语句,于是当成变量处理,当读取到file1时,发现只有一个参数,则当作输入文件,于是开始处理该文件。在处理file1时,var1和var2都是有效的,但var3还未赋值,因此var3无效。当处理完file1后,继续解析下一个主输入文件,此时var3被赋值,并开始处理file2。在处理file2时,var1、var2和var3都是有效的,但var1被新值覆盖

linux三剑客的基本使用——grep、sed、awk

参考技术A grep、sed、awk是linux功能非常强大的三个命令,grep是查找过滤文本,sed是对文本进行编辑替换,awk是对文本进行分析报告。

最简单的理解就是找什么东西用grep,想修改什么内容用sed,想格式化内容用awk。

创建一个文件名为grep_text.txt的文件,并放入内容:
SillyMadman is both a madman and a fool.
Everyone agrees with this sentence.

我要查找在grep_text.txt文件里有Silly的行
命令是: grep Silly grep_text.txt
会返回内容:SillyMadman is both a madman and a fool.

也可以带以下参数,这些我认为可能容易用到的参数,其它的参数需要另行查找
文档,比如可以使用正则进行匹配。

内容相关的
-B, --before context=NUM显示所在行之前的行数
-A, --after context=NUM显示所在行之后的行数
-C, --context=NUM打印输出上下文的行数

过滤内容相关的参数:
-i, --忽略大小写区分
-w,--匹配查找的整个单词
-x,--匹配查找的整行文本
-v, --过滤掉匹配的内容

输出内容相关的参数
-n, --行号打印带有输出行的行号

比如,我要查找在grep_text.txt文件里不区分大小写查找sillymadman,并显示行号和匹配文本的下一行,那么我可以用以下命令查找
grep sillymadman grep_text.txt -i -n -A1
内容返回为
1:SillyMadman is both a madman and a fool.
2-Everyone agrees with this sentence.

总体而言grep的使用方式就是
grep [参数...](查找的内容) (文件名)

grep也经常搭配管道符号"|"使用,比如我要查询某程序的进程,并去掉查找进程本身,那么命令为
ps -ef | grep program_name | grep -v grep

再创建一个文件名为sed_text.txt的文件,并放入内容:
SillyMadman is both a madman and a fool.
Everyone agrees with this sentence.

我想要在第一行下面添加一句:woshishazi
命令是:sed '1a\woshishazi' sed_text.txt
返回内容为:
SillyMadman is both a madman and a fool.
woshishazi
Everyone agrees with this sentence.

但是以上这个命令不会修改原文件,如果需要,需要加上-i
sed -i '1a\woshishazi' sed_text.txt

上面a是代表append,从指定行后面新的一行添加数据,还有其他操作

操作有以下这些
a :从下面一行新增
i :从上面一行插入,
d :删除
c :整行替换
p :打印
s :对指定内容进行替换

下面稍微举下例:
a: sed '1a\woshishazi' sed_text.txt 从第一行后面添加
i: sed '1i\woshishazi' sed_text.txt 从第一行前面插入
d: sed '1d' sed_text.txt 删除第一行
c: sed '1c\woshishazi' sed_text.txt 替换第一行内容为woshishazi
p: sed -n '1p' sed_text.txt 打印第一行,一般搭配-n使用,其他内容就不会再展示
s:这个相对复杂一点需要详细说明一下
sed的参数为 '[行]s/要被替换的内容/新的内容/g'
行是一个可选项,可以选择具体的行进行替换
g代表替换所有匹配到的内容,也可以改为数字,表示第几次匹配到时进行替换
sed 's\SillyMadman\shafengzi\g' sed_text.txt ,将所有SillyMadman替换为shafengzi
输出结果为:
shafengzi is both a madman and a fool.
Everyone agrees with this sentence.

最后再创建一个文件名为awk_text.txt的文件,并放入内容:
1 a
2 b
3 c
4 d
5 f
以空白符作为分隔符这个文本相当于每一行有两个字段。

那么打印第一个字段时 awk 'print 0的话,则代表打印所有字段

awk默认以空白符作为分隔符,也可以指定分割符通过-F
awk -F: 'print $1' awk_text.txt,以“:”作为作为分隔符
那么返回内容就为
1 a
2 b
3 c
4 d
5 f
相当于只有一列或者说一个字段

然后还可以对前面加上一个正则对行进行匹配内容
awk '/a/print 2 ~ /a/)print $1' awk_text.txt
返回内容为
1

以上是关于find、grep、sed、awk的使用的主要内容,如果未能解决你的问题,请参考以下文章

shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)

linux--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

find/pg/grep/sed/awk命令

linux下查找文件及文件内查找内容--find/grep/sed/awk

Linux四剑客find/grep/awk/sed

Linux-四剑客-find-awk-grep-sed解释----未完结版