青成林语

协助他人,成就彼此 ^_^
shell编程 sed详解

1,作用和工作原理:

作用:处理文件内容(增删改查),学了sed之后可以对较大的文件或者大批量的文件进行高效率的处理。

工作原理:sed读取一行,首先将这行放入缓存,然后才对这行进行处理,处理完后,将缓存区的内容发送到终端,其中sed对应的缓存区空间称为:模式空间。

2,格式:

sed [选项] [sed命令] [输入文件]

注意事项:

1,他们之间都有空格,每个元素至少一个空格

2,sed命令是sed软件的内置命令选项(称为sed命令选项是为了和前面的选项区分),它可以是单个也可以是多个sed命令的组合 (后面我们可以学到用-e选项可以实现组合)

3,sed命令两边用'' sed命令前是限制条件。

3,选项说明

选项 解释说明(带*的为重点)
 -n 取消默认的sed软件的输出,常与sed命令的P连用*
-e

一行命令语句可以执行多条sed命令   *

-r ruguler 使用扩展正则表达式,默认情况sed只识别基本正则表达式  *
-i  inside

直接修改文件内容,而不是输出到终端,如果不使用-i选项sed软件只是修改在内存中的数据,并不会影响磁盘上的文件*

所以seq命令,不使用-i的话,默认不会修改文件内容

sed命令 解释说明(带*的为重点)
a  append 追加,在指定行后再追加一行或多行文本*
i    insert 插入,在指定行前再插入一行或多行文本*
c   chenge 取代,取代指定行
d  delete 删除指定的行
p  print 打印模式空间内容,通常p会与选项-n一起使用*
特殊符号 解释说明
! 就像一个sed命令,放在限制条件后面 对指定行以外的所有行应用命令

 

例子:

a:sed '2a cjk' nidaye

i:sed '3i cjk' nidaye

补充:同时增加多行用\n

sed '2a nimei\nimei\nimei' test

匹配的的行:删除以root开头的行   #sed '/^root/d' test

指定的行:删除2到5行以外的行sed '2,5d' test

取反:sed '2,5!d' test

 

改(替换)

例子:将5到9行内容替换为 cjk

sed '5,9c cjk'  test 

补充文本替换

文本替换

1,选项

这里用到的sed命令,选项:
“s”:单独使用-->将每一行中第一处匹配的字符串进行替换==>sed命令
“g”:每一行进行全部替换-->sed命令s的替换标志之一(全局替换),非sed命令。
“-i”:修改文件内容-->sed软件的选项,注意和sed命令i区别。

2,格式

sed  -i  ' s/目标内容/替换内容/g'  filename

例子:

将/etc/passwd 中的root 改成ken

sed -i 's/root/ken/g' /etc/passwd

补充

sed -i '1s/root/ken/g' /etc/passwd

 

查找指定的字符串

打印指定行,第4行。

sed  -n '4p'  test

例子,显示/etc/passwd中包含root的行(显示(打印)模式空间中的内容)

方法1 sed  -n '/root/p ' /etc/passwd

补充:-e多点操作

例子:去掉文件中的注释行和空白行

sed -e '/^#/d' -e '/^$/d'  /etc/passwd

posted on 2019-04-13 09:03  青成林语  阅读(894)  评论(0编辑  收藏  举报