Linux学习——sed工具的使用

目录

一、sed概述       

1.sed命令的常用选项:

2.sed命令的操作符:

二、sed命令的打印功能

(一)默认打印方式:

1.sed -e 'p' 123123.sh        --sed有一个默认输出,加上p,会打印两行

2. sed -n 'p' 123123.sh        -- -n禁止了默认输出,就只有一行

 3. 打印时对行号的操作sed -n '=' 123123.sh        --只显示行号

4. 显示行号和每行的内容        sed -n '=;p' 123123.sh

 (二)sed命令的寻址打印:

1.方式一:按照行号寻求内容

2.方式二:进行行号范围区间的打印

 3.方式三:指定间隔打印

4.方式四:对奇数行和偶数行的打印

 二、文本模式过滤行内容

1.方式一:对包含的字符串进行过滤打印

2.方式二:应用基础正则表达式进行打印

3.方式三:使用扩展正则表达式进行打印

三、sed的删除操作:

1.通过行号进行删除

2.匹配字符串内容删除

四、sed替换命令:

1.sed命令的增加:

五、总结:


一、sed概述       

        sed是文本处理工具,读取文本内容,根据指定的条件进行处理,如增删改查等,可以在无交互的情况下实现相当复杂的文本处理操作,sed被广泛应用于shell脚本,以完成自动化处理任务。

        sed也是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反反复复操作;编写转换程序等。

sed依赖于正则表达式

sed的工作原理:读取→执行→显示

基本操作格式:

sed -e '操作' 文件1 文件2

sed -e '操作' 文件1 文件2

sed -f 脚本操作 文件1 文件2

sed -i -e '操作' 文件1 文件2

执行多条命令的格式:

方式一:sed -e '操作1' -e '操作2' 文件

方式二:sed -e '操作1;操作2' 文件

方式三:sed -e 'n{

操作1

操作2

......

}' 文件1

1.sed命令的常用选项:

-e或--expression:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用

-f或--file=:表示用指定的脚本文件来处理输入的文本文件。

-h或--help:显示帮助。

-i:直接修改目标文本文件

-n:仅显示script处理后的结果

2.sed命令的操作符:

s:替换,替换指定字符。

d:删除,删除选定的行。

a:增加,在当前行下面增加一行指定内容。

i:插入,在选定行上面插入一行指定内容。

c:替换,将选定行替换为指定内容。

y:字符转换,转换前后的字符长度必须相同。

p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用。

=:打印行号。

l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)。

r:高级正则表达式。


sed最为核心的功能是增删改查

二、sed命令的打印功能

(一)默认打印方式:

1.sed -e 'p' 123123.sh        --sed有一个默认输出,加上p,会打印两行

Linux学习——sed工具的使用_第1张图片

2. sed -n 'p' 123123.sh        -- -n禁止了默认输出,就只有一行

Linux学习——sed工具的使用_第2张图片

 3. 打印时对行号的操作sed -n '=' 123123.sh        --只显示行号

Linux学习——sed工具的使用_第3张图片

4. 显示行号和每行的内容        sed -n '=;p' 123123.sh

Linux学习——sed工具的使用_第4张图片

 (二)sed命令的寻址打印:

1.方式一:按照行号寻求内容

sed -n '1p' 123123.sh        --打印第1行

sed -n '4p' 123123.sh        --打印第4行

sed -n '$p' 123123.sh        --打印最后一行

Linux学习——sed工具的使用_第5张图片

2.方式二:进行行号范围区间的打印

sed -n '1,3p' 123123.sh        --打印1-3行

sed -n '5,$p' 123123.sh        --打印第五行到最后一行

sed -n '2,+2p' 123123.sh        --打印第二行+两行的内容,相当于2,4p

Linux学习——sed工具的使用_第6张图片

打印前n行:

sed -e '5q' 123123.sh

Linux学习——sed工具的使用_第7张图片

 3.方式三:指定间隔打印

sed -n -e '3p' -e '8p' 123123.sh        -- 打印第3行和第8行

sed -n -e '2p' -e '$p' 123123.sh        -- 打印第2行和最后一行

Linux学习——sed工具的使用_第8张图片

4.方式四:对奇数行和偶数行的打印

sed -n 'n;p' 123123.sh        -- 打印偶数行        'n'代表next

sed -n 'p;n' 123123.sh        -- 打印奇数行

这里的n就是指高级模式的意思,n在p前面,跳过一行,打印下一行,就是偶数行;在后面,就是打印第一行,然后跳过一行,形成奇数行。

Linux学习——sed工具的使用_第9张图片

 二、文本模式过滤行内容

1.方式一:对包含的字符串进行过滤打印

//中间表示存放指定的内容

sed -n '/591/p' 123123.sh        -- 打印包含591的行

sed -n '/o/p' 123123.sh        -- 打印包含o的行

sed -n '/wo/p' 123123.sh        -- 打印包含wo的行

Linux学习——sed工具的使用_第10张图片

2.方式二:应用基础正则表达式进行打印

sed -n '/^root/p' 123123.sh        -- 打印以root为开头的所有内容,全文本搜索

sed -n '/bash$/p' 123123.sh        -- 打印以bash结尾的所有内容,全文本搜索

sed -n '4,/bash$/p' 123123.sh        -- 从第四行开始,一直打印到第一个以bash为结尾的所在行

Linux学习——sed工具的使用_第11张图片

3.方式三:使用扩展正则表达式进行打印

注意:

sed -r 支持扩展正则表达式。同时在使用{n}、{n,}、{n,m}时,括号{}前不需要加反斜杠\。

三、sed的删除操作:

sed -i 时会对文本进行实际操作(建议对目标文件先进行备份,再进行操作)

1.通过行号进行删除

sed -n '3d;p' 123123.sh        -- 删除第三行,打印剩余的所有内容

sed -n '5,8d;p' 123123.sh        -- 删除5到8行,打印剩余的所有内容

sed -n '5,$d;p' 123123.sh        -- 删除5到最后一行,打印剩余的所有内容

sed '4,6!d;p' 123123.sh        -- 除了4-6行,其他的全部删除

Linux学习——sed工具的使用_第12张图片

2.匹配字符串内容删除

sed '/one/d' 123123.sh        -- 删除包含one的行

sed '/one/,/six/d' 123123.sh        -- 删除one到six的行

sed '/one/,/six/!d' 123123.sh        -- 除了one到six的行,其余的全部删除,反向删除

sed '/six/!d' 123123.sh        -- 除了six的行,其余的全部删除,反向删除

sed '/^$/d' 123123.sh        -- 删除文本空行

四、sed替换命令:

格式:行范围 s/旧字符/新字符/替换标记 文件名

替换标记:

数字:表明新字符串将替换地基础匹配的地方

g:表明新字符串将会替换所有匹配的地方

p:打印与替换命令匹配的行,与-n一起使用

w文件:将替换的结果写入文件中

sed命令的替换中:

s:替换字符串

c:整行替换

y:字符替换,替换前后的字符串长度必须相同

命令示例:

sed -n 's/root/test/2p' /etc/passwd        -- 指定第二个rooot,替换为test

sed -n 's/root/test/gp' /etc/passwd        -- 所有的root都替换为test

sed -n '/^root/ s/^/#/p' /etc/passwd        -- 以root开头开始处理,把开头为空的替换为#,相当于将整行添加注释#

Linux学习——sed工具的使用_第13张图片

字母字符进行大小写的替换:

sed 's/[A-Z]/\l&/g' 123123.sh

-- 将大写全部转换为小写,l&是转换小写的一种特殊的符号,前面要加转义符"\"。

sed 's/[a-z]/\u&/' 123123.sh        -- u&是转换首字母大写的一种特殊的符号,前面要加转义符"\"。

sed 's/[a-z]/\U&/g' 123123.sh        -- 末尾加上了一个g,表示全部转换成大写

整行替换:

sed '/ONE/c ok' 123123.sh        -- 将含有ONE的整行替换为ok

sed '/TWO/c TEST' 123123.sh        -- 将含有TWO的整行替换为TEST

单字符的替换:

使用y,是对单个字符进行替换,每个字符需要一一对应,不是整体替换。前后字符串长度需要一致,不然会报错。

sed 'y/YH/78/' 123123.sh        -- 将TH替换为78

sed 'y/aaa/123' 123123.sh        -- 只匹配一次,输出111

1.sed命令的增加:

a:在行后添加内容

i:在行前面插入内容

r:在行后读入文件内容

命令示例:

sed '/three/a 123' 123123.sh

sed '/three/i 123' 123123.sh

sed '$r test2.txt' 123123.sh        -- 先读取test2内容,然后在123123.sh的末行插入test2.txt的所有内容。

五、总结:

1.sed命令时一种流编辑器读取文件会进行逐行读取加上指令操作,所以过大的文件一定要拆分后再交给sed处理。

2.sed -r 搭配扩展正则表达式使用,使用\{n\}        \{n,\}        \{n,m\}        不需要加"\"。

3.用-i时一定要先备份(尤其对重要文件的操作),或者事先试验好确定无误时,再使用-i。

4.sed命令的重点在于增删改查四个功能,可以运用再脚本中重要配置文件的修改、添加等作用尤其有效。

你可能感兴趣的:(Linux学习,linux,学习,运维)