linux中的sed使用技巧
文章目录前言一、sed 命令的两种语法二、sed格式1、sed选项2、sed编辑命令三、sed命令实操1 、sed编辑命令------a:追加向匹配行后面插入内容(1)、在文件某一行后面添加内容(2)、在匹配到的内容后面添加内容(3)、在末尾一行后面添加内容2 、sed编辑命令------i:插入向匹配行前插入内容(1)、在文件某一行前面添加内容(2)、在匹配到的内容前面添加内容(3)、在末尾一行
文章目录
前言
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。
一、sed 命令的两种语法
1、在命令行指定sed指令对文本进行处理:sed +选项 ‘指令’ 文件
2、先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件。
二、sed格式
1、sed选项
sed的常用选项:
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-f:后跟保存了sed指令的文件
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
2、sed编辑命令
sed中的编辑命令:
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
三、sed命令实操
sed编辑命令
1 、sed编辑命令------a:追加 向匹配行后面插入内容
(1)、在文件某一行后面添加内容
命令:sed ‘3ateach’ a.txt
含义:a:追加向匹配行后面插入内容
给文件的第三行追加teach一行
(2)、在匹配到的内容后面添加内容
命令:sed ‘/ab/ateach’ a.txt
含义:a:追加向匹配行后面插入内容
匹配到了ab,则在含有ab行的后面都添加teach
(3)、在末尾一行后面添加内容
命令:sed ‘$ateach’ a.txt
含义:a:追加向匹配行后面插入内容
在最后一行添加teach
2 、sed编辑命令------i:插入 向匹配行前插入内容
(1)、在文件某一行前面添加内容
命令:sed ‘3iteach’ a.txt
含义:i:插入 向匹配行前插入内容
在第三行前面插入teach内容
(2)、在匹配到的内容前面添加内容
命令:sed ‘/ab/iteach’ a.txt
含义:i:插入 向匹配行前插入内容
在匹配到ab内容的前面插入teach
(3)、在末尾一行前面添加内容
命令:sed ‘$iteach’ a.txt
含义:i:插入 向匹配行前插入内容
在最后一行前面插入teach
3、sed编辑命令------c:更改 更改匹配行的内容
(1)、将第一行内容更改
命令:sed ‘1cteach’ a.txt
含义:c:更改 更改匹配行的内容
将匹配到的第一行更改为teach
(2)、将匹配到的内容行更改
命令:sed ‘/ab/cteach’ a.txt
含义:c:更改 更改匹配行的内容
将匹配ab的行更改为teach
(3)、将最后一行内容更改
命令:sed ‘$cteach’ a.txt
含义:c:更改 更改匹配行的内容
将最后一行更改为teach
4、sed编辑命令------d:删除 删除匹配的内容
(1)、指定删除第几行
命令:sed ‘2d’ a.txt
含义:d:删除 删除匹配的内容
删除了第二行的内容
(2)、间隔删除
命令:sed ‘1~2d’ a.txt
含义:d:删除 删除匹配的内容
从第一行开始删除,每隔两行就删掉一行
(3)、删除指定范围内的行
命令:sed ‘1,2d’ a.txt
含义:d:删除 删除匹配的内容
删除1到2行的内容
(4)、删除指定范围内的取反行
命令:sed ‘1,2!d’ a.txt
含义:d:删除 删除匹配的内容
删除1和2之外的行
(5)、删除最后一行
命令:sed ‘$d’ a.txt
含义:d:删除 删除匹配的内容
删除最后一行
(6)、删除匹配到的行
命令:sed ‘/123/d’ a.txt
含义:d:删除 删除匹配的内容
删除匹配到的行
(7)、删除从匹配到的行到最后一行
命令:sed ‘/123/,$d’ a.txt
含义:d:删除 删除匹配的内容
删除从匹配到的行到最后一行
(8)、删除匹配行及其后面一行
命令:sed ‘/123/,+1d’ a.txt
含义:d:删除 删除匹配的内容
删除匹配行及其后面一行
(9)、删除空行
命令:sed ‘/^$/d’ a.txt
含义:d:删除 删除匹配的内容
删除空行,^代表第一个字符之前,$代表最后一个字符之后,和在一起表示空行
(10)、删除匹配和不匹配ewq或者123的行
命令:sed ‘/ewq|123/d’ a.txt
含义:d:删除 删除匹配的内容
删除ewq或者123的行
命令:sed ‘/ewq|123/!d’ a.txt
含义:d:删除 删除匹配的内容
删除 除了ewq或者123之外的行
(11)、删除指定范围内的匹配到的行
命令:sed ‘1,5{/cba/d}’ a.txt
含义:d:删除 删除匹配的内容
删除1到5行中匹配到cba行的内容行
5、sed编辑命令------s:替换 替换掉匹配的内容
(1)、替换内容
命令:sed ‘s/abc/hello/g’ a.txt
含义:s:替换 替换掉匹配的内容
将文件中匹配到abc的替换为hello,默认值匹配每一行的第一个abc
要替换文件内所有的abc,则应该在后面加一个g
(2)、替换一行中匹配到的第2次出现的值
命令:sed ‘s/abc/hello/2’ a.txt
含义:s:替换 替换掉匹配的内容
匹配abc,只替换每一行中的第二次出现的abc
(3)、替换一行中匹配到的第2次出现的值
命令:sed -n ‘s/123/hello/gpw b.txt’ a.txt
含义:
(1)-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
(2)s:替换 替换掉匹配的内容
(3)g:要替换文件内所有的abc,则应该在后面加一个g
(4)p:打印 打印出匹配的内容,通常与-n选项和用
(5)r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
匹配每行中的123,并替换成hell,把替换的结果放入到b.txt当中
(4)、匹配有#号的行,替换匹配行中逗号后的所有内容为空 (,.*)表示逗号后的所有内容
命令:sed ‘/#/s/,.*//g’ a.txt
含义:
(1)s:替换 替换掉匹配的内容
(2)g:要替换文件内所有的abc,则应该在后面加一个gg
(3)(,.*):表示逗号后的所有内容
匹配有#号的行,替换匹配行中逗号后的所有内容为空 (,.*)表示逗号后的所有内容
(5)、替换每行中的最后两个字符为空,每个点代表一个字符,$ 表示匹配末尾 (…$)表示匹配最后两个字符
命令:sed ‘s/…$//g’ a.txt
含义:
(1)s:替换 替换掉匹配的内容
(2)g:要替换文件内所有的abc,则应该在后面加一个gg
(3)(…$):表示匹配最后两个字符
命令: sed ‘s/^…//g’ a.txt
含义:
表示替换每行中的前面两个字符为空
(6)、替换#开头的行为空,即注释的行 ( ^#)表示匹配以#开头,(.*)代表所有内容
命令:sed ‘s/^#.*//g’ a.txt
含义:
替换#开头的行为空,即注释的行 ( ^#)表示匹配以#开头,(.*)代表所有内容
(7)、把#开头的行替换为空,并删除空行,替换和删除操作中间用分号隔开
命令:sed ‘s/^#.*//;/ ^ $/d’ a.txt
含义:
(1)删除空行,^代表第一个字符之前,$代表最后一个字符之后,和在一起表示空行
把#开头的行替换为空,并删除空行,替换和删除操作中间用分号隔开
(8)、将每一行中行首的数字加上一个小括号
命令:sed ‘s /^ [0-9]/(&)/’ a.txt
含义:
(1)(^ [0-9])表示行首是数字
(2)&符号代表匹配的内容
命令: sed ‘s/(^ [0-9])/(\1)/’ a.txt
替换左侧特殊字符需要转义,右侧不需要转义,\1代表匹配的内容
(9)、将每一行中末尾增加字段
命令:sed ‘s/$/& world/’ a.txt
含义:
(1)$:表示匹配末尾
(2)&:符号代表匹配的内容
6、sed编辑命令------r:读编辑命令,r用于将内容读入文件
(1)、从文件读取内容
命令:sed ‘r b.txt’ a.txt
含义:
(1)r:读编辑命令,r用于将内容读入文件
将b.txt文件内容读入到a.txt中,会在a.txt的每一行都读入b.txt内容
(2)、指定行之后插入内容
命令:sed ‘3r b.txt’ a.txt
含义:
(1)r:读编辑命令,r用于将内容读入文件
在第三行之后插入b.txt的内容,(可用于向文件中插入内容)
(3)、在匹配行之后插入内容
命令:sed ‘/123/r b.txt’ a.txt
含义:
(1)r:读编辑命令,r用于将内容读入文件
在匹配行之后插入b.txt的内容,如果有多个123,会在多个之后都插入内容(可用于向文件中插入内容)
(4)、在末尾行之后插入内容
命令: sed ‘$r b.txt’ a.txt
含义:
(1)r:读编辑命令,r用于将内容读入文件
(2)$:代表末尾
在匹配行之后插入b.txt的内容,如果有多个123,会在多个之后都插入内容(可用于向文件中插入内容)
7、sed编辑命令------w:写编辑命令,w用于将匹配内容写入到文件
(1)、将匹配的到内容写入到另外一个文件
命令:sed -n ‘w b.txt’ a.txt
含义:
(1)w:写编辑命令,w用于将匹配内容写入到文件
将a.txt写入b.txt中,如果b.txt不存在,则创建,存在则覆盖之前的内容
(2)、将指定的行的内容写入到另外一个文件
命令:sed ‘2w b.txt’ a.txt
含义:
(1)w:写编辑命令,w用于将匹配内容写入到文件
将a.txt第二行的内容写入到b.txt中
(3)、指定不同行的内容写入到另外一个文件(一条命令执行多个sed)
命令:sed -n -e ‘1w b.txt’ -e ‘$w b.txt’ a.txt
含义:
(1)w:写编辑命令,w用于将匹配内容写入到文件
(2)-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
(3)-n:读取下一行,遇到n时会自动跳入下一行
将a.txt第一行和最后一行写入b.txt中
(4)、指定不同行的内容写入到多个文件中(一条命令执行多个sed)
命令:sed -n -e ‘1w b.txt’ -e ‘$w c.txt’ a.txt
含义:
(1)w:写编辑命令,w用于将匹配内容写入到文件
(2)-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
(3)-n:读取下一行,遇到n时会自动跳入下一行
将a.txt第一行和最后一行写入b.txt中
(5)、匹配多个内容,写入另外一个文件中
命令:sed -n ‘/#|123/w b.txt’ a.txt
含义:
(1)w:写编辑命令,w用于将匹配内容写入到文件
(2)-n:读取下一行,遇到n时会自动跳入下一行
将a.txt匹配到#和123的内容行,写入b.txt中
(6)、匹配的内容行至最后一行,写入另外一个文件中
命令:sed -n ‘/321/,$w b.txt’ a.txt
含义:
(1)w:写编辑命令,w用于将匹配内容写入到文件
(2)-n:读取下一行,遇到n时会自动跳入下一行
(3)$:代表末尾
将a.txt匹配到321的内容行至末尾一行,写入到a.txt中
(7)、匹配的内容行及其后面两行,写入另外一个文件中
命令:sed -n ‘/cba/,+2w b.txt’ a.txt
含义:
(1)w:写编辑命令,w用于将匹配内容写入到文件
(2)-n:读取下一行,遇到n时会自动跳入下一行
将a.txt匹配到cba的内容行及其后面两行,写入到a.txt中
sed选项
1、sed选项------n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
(1)、打印文件中第几行内容
命令:sed -n ‘3p’ a.txt
含义:-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
(2)、从第一行开始,每隔两行打印一行
命令:sed -n ‘1~2p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
~:波浪号后面的2表示步长
从第二行开始,每隔两行打印一行,波浪号后面的2表示步长
(3)、打印文件最后一行
命令:sed -n ‘$p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
$:表示匹配末尾
(4)、打印1到3行
命令:sed -n ‘1,3p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
(5)、打印第三行到末尾一行
命令:sed -n ‘3,$p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
$:表示匹配末尾
(6)、打印匹配到的行
命令:sed -n ‘/e#/p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
/e#/:匹配e#的行
(7)、打印匹配#c的行到第三行的内容
命令:sed -n ‘/#c/,3p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
/#c/:匹配#c的行
该命令会显示匹配到的行,即使不在前三行内
(8)、打印从第一行到匹配到内容的行
命令:sed -n ‘1,/123/p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
打印从第一行到匹配到123的行
(9)、打印从匹配行到末尾行
命令:sed -n ‘/qwe/,$p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
$:表示匹配末尾
打印匹配到qwe的行到末尾行
(10)、打印从匹配行及其向后一行
命令:sed -n ‘/qwe/,+1p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
打印匹配到qwe的行及其向后 一行
(11)、打印两个匹配内容中间行
命令:sed -n ‘/cba/,/123/p’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
p:打印 打印出匹配的内容,通常与-n选项和用
匹配从cba到123行的内容
(12)、打印文件末尾行号
命令:sed -n ‘$=’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
$ :匹配末尾
=:用来打印被匹配的行的行号
$匹配末尾后,打印被匹配的行的行号所以,是末尾行的行号,等同于wc -l a.txt
(13)、打印匹配内容的行号
命令:sed -n ‘/qwe/=’ a.txt
含义:
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
=:用来打印被匹配的行的行号
打印匹配到qwe行的行号
(14)、打印匹配行的行号和内容
命令:sed -n ‘/#/{=;p}’ a.txt
含义:
(1)、-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
(2)、=:用来打印被匹配的行的行号
(3)、p:打印 打印出匹配的内容,通常与-n选项和用
打印匹配到#内容的行,打印行号和内容(可用于查看日志中有error的行及其内容)
持续更新中…
更多推荐
所有评论(0)