Sed命令

SED解析

如上图。要注意的就有点

1 sed 后面的处理必须要加 ' '括起来才行

2 2,5意思就是2-5行

3 d,从解析的第二张图可以得知,是删除的意思。所以整句话的意思就是  删除2-5行。所以结果如下图,2-5行就删除了。

新增同上,无非就是把d改成a,如图:

如果我只想打印2-5行,我该如何操作呢?一般情况下都会如下图所示

看到了么?这个命令的结果就是2-5行重复输出了。为什么呢?好吧我们回头看解析,解析图第一张的第一行

-n  使用安静模式。为什么呢?一般sed所有的sdin数据都会显示,只有加上-n之后,sed特殊处理之后的数据才会被列出来。这就是为什么上图2-5行重复的原因,首先他将2-5行全部列出来之后,在将sed处理之后的数据在打印一遍,这就造成了2-5行数据的重复。

那么我们使用-n模式试一下

,只列出了2-5行的数据。完美,不是么?

,利用sed命令来替换字符串,及搜选字符串

例:

1 查询Ip 来进行操作。首先利用 /sbin/ifconfig 来查询本地网络连接的相关详细信息,如下图

2 利用grep上一个随笔写的正则表达式,来获取ip那一行,也就是inet 192......那一行。

OK。 /sbin/ifconfig ens33 | grep 'inet'

结果出来两行:

如何将inet6那一行给干掉呢。我第一个就是想到表达式$符,末尾嘛。可是查询结果没有内容。再仔细看,原来$是行的末尾。也就是末尾是什么的字符,学的不扎实的毛病出来了。

仔细看,inet后面有空格,inet6后面是6.那我们只要grep 'inet '就OK了么?测试一下,OK

通过上面三步,就将ip地址获取到了。上面利用了正则表达式的相关内容

首先通过inet空格,将inet那一行取出来。

然后通过 sed 's/^.*innet //g'来讲inet删掉。理解一下里边的内容

目的就是用后面的替换前面的。首先是s,替换。然后用//g来替换/^.*innet。然后我们再来理解一下/^.*innet 。首先一个转义字符/,在grep中都是用单引号来括起来的。这里没有单引号,用的是/转义字符。这点要注意。后面的^头部开始,有 . 一个字符或者*多个字符,一直读到innet。意思就是获取innet前面的所有的内容。 然后用//g来替代。/是一个转义字符,转义的是/g的/,意思就是空。 至于后面的/g是什么意思呢?书中没有解释,百度一下。找到了一个解释,我觉得比较明白了。如下图,连接地址https://www.cnblogs.com/yelang-lkg/p/5502744.html。

,加上g就是全匹配。如果里面有多个Ip 地址的话,加上/g,执行一次取一个,这样循环往下取,如果不加/g,就只能获得第一个Ip的匹配。

 

1 搜寻man。2 将注释用空格替换  3 去掉空格。

这是书中的原例,对于这个例子。我们其实直接将注释删除就OK。不需要替换,估计是书中的特意演示。如下图,操作一下

看到了没,第一行的命令,执行的结果跟上图是一样的。

上面所有的实例都是用于屏幕输出,而不是改变原文件。如果要改变原文件,只需要在前面所有输出前面加上一个-i,后面再加上一个想要修改的文件就可以。

例:。画框的三部分。

延伸正规表示法

原文地址:https://www.cnblogs.com/Lonelychampion/p/11187373.html