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