sed常用用法小结

 

基础用法

sed 选项 '处理规则' 处理文本

常用选项:

-e:默认:显示原文本和处理后的文本

-n:安静模式,即不显示原文本,只显示处理文本

-i:不显示到屏幕,直接修改原文本

常用动作:

a:在指定行后面追加一行

i:在指定行前面插入一行

c:替换指定行为新行

d:删除指定行

s:替换指定字符,可用正则表达式

p:打印指定行

 

命令详解

以行为操作单位:sed 选项 'n1[,n2]动作' 文本 (其中n2可用$符表示最后一行)

以关键字为操作单位: sed 选项 '/关键字/动作' 文本

示例:

待处理文本test.txt内容如下:

1.增加append

在第一行后增加一行:

sed '1a append line' test.txt

在第一至二行后增加一行:

sed '1,2a append line' test.txt

在第一至最后一行后增加一行:

sed '1,$a append line' test.txt

注意这里sed处理规则用单引号包裹,可以直接用$符表示最后,若使用双引号包裹,则必须要加反斜杠\转义$符:

sed "1,\$a append line" test.txt

在含有关键字you的所有行之后增加一行:

sed '/you/a append line' test.txt

2.插入insert

在第一行前增加一行:

sed '1i insert line' test.txt

在含有关键字you的所有行之前增加一行:

sed '/you/i insert line' test.txt

3.替换replace

替换第一行为新行:

sed '1c replace line' test.txt

替换所有含有关键字you的行为新行:

sed '/you/c replace line' test.txt

4.删除delete

删除第一行:

sed '1d' test.txt

删除所有含关键字you的行:

sed '/you/d' test.txt

5.正则替换special character replace

将文本中所有的的字符s替换为S:

sed 's/s/S/g' test.txt

将文本中每一行首次匹配到的字符s替换为S:

sed 's/s/S/' test.txt

6.打印print

打印第一行:

sed '1p' test.txt

打印含有关键字you的所有行:

sed '/you/p' test.txt

 

以上动作都可以在sed命令后加上-i选项,使sed操作对原文本的修改生效(即把输出到屏幕中的内容覆盖原文本内容),虽然操作较为危险,但也是实际工作中最常使用的场景,尤其是动作s,而通常我们需要修改的是文件中的一个或几个特殊的仅有字段,比如配置文件中的参数值等。下面罗列几个注意点:

1.脚本中使用sed命令处理变量时需要使用双引号,因为单引号会防止$符扩展:

sed -i "s/config/${new_config}/g" configfile

2.使用动作s按关键字搜索时发现关键字中包含斜杠/,会与语法结构冲突,可以将语法中的斜杠/替换为其他字符,如@、#、&等(仅限于动作s):

sed -i "s@config@${new_config}@g" configfile

3.使用sed修改软链接文件时需要加--follow-symlinks参数从而不破坏软连接文件类型:

sed -i --follow-symlinks "s/config/${new_config}/g" soft_link_file

 

sed处理空行

以下都是不对源文件file生效的情形,若想生效,加上-i选项。

1.删除空行

单双引号皆可:

sed '/^$/d' file
sed "/^$/d" file

2.将空行替换为指定文本

单双引号皆可:

sed '/^$/c a new line' file
sed "/^$/c a new line" file

3.将某一行替换为空行

单引号:

sed '1c \\' file

双引号:

sed "1c \\\\" file
sed "1c \\\ " file

4.插入一行空行

以追加方式a为例

单引号:

sed '1a \\' file

双引号:

sed "1a \\\\" file
sed "1a \\\ " file

 

posted on 2021-01-10 20:04  生存战略  阅读(464)  评论(0)    收藏  举报

导航