linux-文件内容查找-grep,sed,awk-学习总结

说明

对于文件内容的查找,linux上主要有3个命令,可进行查找定位,每个命令的侧重方向不一样。
grep就是在茫茫字符串中找到目标字符串,并且能够进行一定的统计取反等。但是不能对文件内容进行删除,替换,修改,统计个数,对提取的字符串进行执行命令等等。
sed命令,理论上, 我觉得是能够它直接代替grep,因为sed的功能是能够覆盖grep的。在grep的基础上,增加了对文件内容的增删改的功能
awk的命令就更加强大了,我觉得,这个awk命令,我觉得能够顶替grep和sed,因为awk的命令包含了grep和sed的所有功能,而且更加灵活。

一.grep

grep是用来抓取目标字符串,如果对这个目标字符串有特殊的需求,需要处理,可以使用选项中的命令,最为重要的是,它可以使用正则表达式,一旦能够使用正则表达式,就意味着,没有它找不到的字符串。正则表达式,真是牛逼。

1.grep的命令格式

grep [选项] [要查询的字符串] [在哪个文件查询]
grep的选项也是非常多,但是常用的就是那么几个。
选项 含义 功能描述
-i ignore case 忽略大小写
-v invert match 不匹配匹配的
-l file-with-match 输出匹配的文件名
-L file-without-match 输出不匹配的文件名
-c count 输出匹配的数目(行数)
-n number 输出匹配行的同时在前面加上文件名及在文件名中的行数
-h no-filename 抑制文件名的输出

举例说明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.正则表达式

在这里插入图片描述

3.与find结合使用

在这里插入图片描述

二.sed

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed命令可以用来查看,编辑文本文件
sed命令实在是多,多到让人眼花缭乱,我觉得首先明白,sed命令涵盖grep的功能,在这个基础上,又额外增加了几种功能,比如能够对文件进行增加,插入,删除,修改,替换等操作。我感觉最牛的功能,可能是替换。
下面,我会从3个方面来说,原理,常规用法,正则表达式

1.sed的原理

非交互式就是指sed只能够在命令行下输入编辑命令来对文本进行编辑,然后在屏幕上查看输出。
流式是指sed每次只从文件中读入一行,然后对该行进行指定的处理,并将处理结果输出到屏幕上,处理完后在读入下一行。
sed对文本的过程处理如下(一切尽在不言中,需细看):
在这里插入图片描述

2.sed的命令格式及其常规用法

sed命令格式
sed [选项] ‘command’ 文件名称

格式中的常见选项命令

选项部分,常见选项包括-n,-e,-i,-f,-r选项。
1.选项-n
-n或–quiet或–silent 仅显示script处理后的结果。
2.选项-e
如果需要用sed对文本内容进行多种操作,则需要执行多条子命令来进行操作。
例子1

echo -e 'hello world' | sed -e 's/hello/A/' -e 's/world/B/'

结果:A B
例子2:

echo -e 'hello world' | sed 's/hello/A/;s/world/B/'

结果:A B
3.选项-i
sed默认会把输入行读取到模式空间,简单理解就是一个内存缓冲区,sed子命令处理的内容是模式空间中的内容,而非直接处理文件内容。因此在sed修改模式空间内容之后,并非直接写入修改输入文件,而是打印输出到标准输出。如果需要修改输入文件,那么就可以指定-i选项。

cat file.txt
hello world
[root@localhost]# sed 's/hello/A/' file.txt
A world
[root@localhost]# cat file.txt
hello world
[root@localhost]# sed -i 's/hello/A/' file.txt
[root@localhost]# cat file.txt
A world

4.选项-f
以选项中指定的script文件来处理输入的文本文件。

echo "hello world" | sed -f sed.script
结果:A B

sed.script脚本内容:

s/hello/A/
s/world/B/

说明:在脚本文件中的子命令串就不需要输入单引号了。

5.选项-r
sed命令的匹配模式支持正则表达式的,默认只能支持基本正则表达式,如果需要支持扩展正则表达式,那么需要添加-r选项。
例子1:

echo "hello world" | sed -r 's/(hello)|(world)/A/g'
A A

格式中的常见command

对文件内容进行增加插入删除修改替换等操作
1.新增a
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
首先查看testfile中的内容如下:

$ cat testfile #查看testfi`le 中的内容  
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 

使用sed命令后,输出结果如下:

$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串  
HELLO LINUX! #testfile文件原有的内容  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test  
newline 

2.删除d
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!

[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略).....

3.插入i
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
在这里插入图片描述
5.取代c
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
在这里插入图片描述
6.取代s
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
在这里插入图片描述

三.awk

awk命令开始看的时候,有点懵,后面多看几次,就明白,感觉这个命令挺牛逼的。这个命令感觉就像是处理数据库表,有行有字段,awk会通过用户给定的分隔符,将文件的每行内容分成列,这样根据行号和列号,可以定位到每个元素。对于字符串的处理粒度更小更精准,并且能够对目标字符串进行统计,或者对目标字符串运行命令等等。awk命令真心非常强大,瞬间觉得grep和sed不香了。
正因为awk命令真的太强大了,用法非常非常多。

1.awk的原理

命令结构:

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

在这里插入图片描述
1、通过关键字 BEGIN 执行 BEGIN 块的内容,即 BEGIN 后花括号 {} 的内容。
2、完成 BEGIN 块的执行,开始执行body块。
3、读入有 \n 换行符分割的记录。
4、将记录按指定的域分隔符划分域,填充域,$0 则表示所有域(即一行内容), 1 表 示 第 一 个 域 , 1 表示第一个域, 1n 表示第 n 个域。
5、依次执行各 BODY 块,pattern 部分匹配该行内容成功后,才会执行 awk-commands 的内容。
6、循环读取并执行各行直到文件结束,完成body块执行。
7、开始 END 块执行,END 块可以输出最终结果。
在这里插入图片描述
在这里插入图片描述

2.AWK用法

直接阅读https://www.cnblogs.com/jxhd1/p/6271179.html
讲非常全面,也非常系统

参考链接

1.grep相关
https://www.runoob.com/linux/linux-comm-grep.html
https://www.linuxprobe.com/linux-grep-rex.html
https://www.cnblogs.com/zhanzhuang/p/10275672.html
2.sed相关
https://www.runoob.com/linux/linux-comm-sed.html
https://www.linuxprobe.com/linux-sed-command.html
下面这篇文章,关于sed定址这块讲的不错,值得细看
https://www.cnblogs.com/hb91/p/9974951.html
3.awk相关,这篇文章有点牛逼,说明awk,真是非常详细啦
https://www.cnblogs.com/jxhd1/p/6271179.html
4.awk的工作原理
https://www.runoob.com/w3cnote/awk-work-principle.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂奔的蜗牛x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值