Linux Command sed 文本处理

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: Linux Command sed 文本处理

Linux Command sed 文本处理

文章目录

Linux Command sed 文本处理

1. 简介

2. 语法

3. 参数

4. 举例

4.1 p:打印行

4.2 d:删除行

4.3 s:字符串替换

4.4 -r:sed支持扩展正则

4.5 多行注释

4.6 r:从文件中读取输入行

4.7 w:另存为某文件

4.8 H:h:G:g 复制粘贴

4.9 行前后添加

4.10 多匹配模式

4.11.1 管道多匹配

4.11.2 -e 多匹配

4.12.3 ; 多匹配

1. 简介Sream EDitor流式编辑器(非交互)===【vim(交互) word,记事本】

非交互,基于模式匹配过滤及修改文本

逐行处理,并将结果输出到屏幕

可实现对文本的输出,删除,替换,复制,粘贴,导出,导入等操作

2. 语法

sed [选项] '条件命令' 文件

3. 参数

-e:多点编辑,可以执行多个子命令
-f:从脚本文件中读取命令(sed操作可以事先写入脚本,然后通过-f读取并执行)
-l:指定行的长度
-n:屏蔽sed的默认输出功能
-i:修改源文件
-r:sed支持扩展正则
-{}:可组合多个命令
-p:打印行
-s:字符串替换   sed 's/ 旧  / 新  /'  a.txt
-d:删除行
#文本块处理:针对整行的插入追加替换操作
i: (insert)插入到行前
a: (append)追加到行后
c: (change)替换修改某行
r:从文件中读取输入行
w:另存为某文件
H:复制(模式空间追加复制
h:复制(模式空间覆盖
G:粘贴(保持空间追加模式空间
G:粘贴(保持空间覆盖模式空间
w  将所选的行写入文件
x  交换暂存缓冲区与模式空间的内容
y  将字符替换为另一字符(不能对正则表达式使用y命令)

4. 举例

4.1 p:打印行

$ sed '1p' /etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
$ sed -n '1p' /etc/rc.local   $打印单行
#!/bin/bash
$  sed -n '1p;4p' /etc/rc.local $打印1和4行
#!/bin/bash
# that this script will be executed during boot.
$ sed -n '2,+3p' /etc/rc.local $打印从第二行数三行
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
$ sed -n '/local$/p' /etc/rc.local $打印以local结尾的行
touch /var/lock/subsys/local
$ sed -n 'p;n' /etc/rc.local $打印奇数行
#!/bin/bash
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
touch /var/lock/subsys/local
$ sed -n 'n;p' /etc/rc.local $打印偶数行
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# that this script will be executed during boot.
$ sed -n '$=' /etc/rc.local $显示函数
6

4.2 d:删除行

$ cat  /etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
$ sed '1,4d' /etc/rc.local $并未真1和4行删除
touch /var/lock/subsys/local
$ cat  /etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
$ sed -i  '1,4d' /etc/rc.local 真删除和4行
$ cat /etc/rc.local
touch /var/lock/subsys/local
其他删除方法
sed '/init/d' /etc/rc.local                 $删除init的行
sed '/init/d;/bin/d' /etc/rc.local          $删除init和bin的行
sed '/init/!d' /etc/rc.local                $删除不包含init的行
sed '$d' /etc/rc.local                      $删除最后一行
sed '/^$/d' /etc/rc.local                   $删除空行

4.3 s:字符串替换

sed 's/ll/TARENA/' /etc/rc.local          $替换所有行的第一“||”
sed 's/ll/TARENA/g'  /etc/rc.local        $替换所有行所有的“||”
sed '3s/script/SCRIPT/2' /etc/rc.local    $替换第三那行的第二个“script”
sed 's/init//g' /etc/rc.local             $删除文件所有的“init”
sed 's/script\|stuff\|e//g' /etc/rc.local $删除所有的“script”、所有的“stuff”、所有的字母e
sed '3,5s/^#//' /etc/rc.local            $解除/etc/rc.local文件第3~5行的注释(去掉开头的$
sed '6,7s/^/#/' /etc/rc.local           $将/etc/rc.local文件的第6~7行注释掉(行首添加$ )
sed 's/.//2;s/.$//'/etc/rc.local       $删除文件中每行的第二个、最后一个字符

替换指定行的下一行内容

$ cat test.txt
i love you
name id year
//n命令-->移动到匹配行的下一行
sed -i '/i love you/{n;s/year/year1/;}'  test.txt
i love you
name id year1

4.4 -r:sed支持扩展正则

sed -r 's/^(.)(.)(.*)/\2\1\3/' /etc/rc.local  $每行文本拆分为“第1个字符”“第2个字符”“剩下的所有字符”三个部分,然后通过替换操作重排顺序为“2-1-3
sed -r 's/^(.)(.*)(.)$/\3\2\1/' /etc/rc.local   $第一个字符和最后一个字符对调
sed -r 's/[0-9]//g;s/^( )+//' /etc/rc.local   $删除所有数字、行首空格
sed 's/[A-Z]/(&)/g' /etc/rc.local            $使用“&”可调用s替换操作中的整个查找串
sed -i '/^id:/s/3/5/' /etc/inittab       $将默认运行级别修改为5 ----------查看效果grep "^id:" /etc/inittab
cat /etc/sysconfig/network-scripts/ifcfg-eth0
sed '/^IPADDR/s/192.168.4.4/172.16.16.4/’/etc/sysconfig/network-scripts/ifcfg-eth0 | grep "^IPADDR"  $将IP地址192.168.4.4修改为172.16.16.4
sed -r -i '/^IPADDR/s/192.168.4.(.*)/172.16.16.\1/' /etc/sysconfig/network-scripts/ifcfg-eth0  $要求只修改网段地址时,可以利用扩展正则表达式的 \1、\2、……等调用,分别对应此前第1个、第2个、…… 以 ()包围的表达式所匹配的内容
grep "^IPADDR" /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's#/var/www/html#/opt/wwwroo$' /etc/httpd/conf/httpd.conf $更改网站根目录
grep "^DocumentRoot" /etc/httpd/conf/httpd.conf $查看修改结果

4.5 多行注释

$ cat tt.txt 
Aprl:1000M:2000
Jan:400G:1000
Feb:30K:100\
May:45K:111
$ sed '/Aprl/,+2s/\(.*\)/#&/' tt.txt 
#Aprl:1000M:2000
#Jan:400G:1000
#Feb:30K:100\
May:45K:111
$ sed '/Aprl/,/Feb/s/\(.*\)/#&/' tt.txt 
#Aprl:1000M:2000
#Jan:400G:1000
#Feb:30K:100\
May:45K:111

4.6 r:从文件中读取输入行

$ cat a.txt 
192.168.1.110 www.baidu.com
$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.120 oss.com
$ sed '/oss/r a.txt' /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.120 oss.com
192.168.1.110 www.baidu.com

4.7 w:另存为某文件

$ cat a.txt 
192.168.1.110 www.baidu.com
$ sed -i 'w c.txt' a.txt 
$ cat c.txt 
192.168.1.110 www.baidu.com
$ sed -i '/oss/w d.txt' /etc/hosts
$ cat d.txt 
192.168.1.120 oss.yun.ccb.com

4.8 H:h:G:g 复制粘贴

H:复制(模式空间追加复制

h:复制(模式空间覆盖

G:粘贴(保持空间追加模式空间

g:粘贴(保持空间覆盖模式空间

[root@monitor1 ~]# sed '1h;1g'  mm
aaaa
bbbb
cccc
[root@monitor1 ~]# sed '1h;2g'  mm
aaaa
aaaa
cccc
[root@monitor1 ~]# sed '1h;3g'  mm
aaaa
bbbb
aaaa
[root@monitor1 ~]# sed '2h;1g'  mm
bbbb
cccc
[root@monitor1 ~]# sed '3h;1g'  mm
bbbb
cccc
[root@monitor1 ~]# sed '1H;1G'  mm
aaaa
aaaa
bbbb
cccc
[root@monitor1 ~]# sed '1H;2G'  mm
aaaa
bbbb
aaaa
cccc
[root@monitor1 ~]# sed '2H;1G'  mm
aaaa
bbbb
cccc

4.9 行前后添加

sed '1i 添加的内容' file $这是在第一行前添加字符串
sed '$i 添加的内容' file $这是在最后一行行前添加字符串
sed '$a添加的内容' file $这是在最后一行行后添加字符串
$ cat mm
aaaa
bbbb
cccc
$ sed '1i 0000' mm
0000
aaaa
bbbb
cccc
$ sed '$i 0000' mm
aaaa
bbbb
0000
cccc
$sed '$a 0000' mm
aaaa
bbbb
cccc
0000
$ cat test 
aaa
bbb
ccc

有某aaa字符串行的下一行加

$ sed '/aaa/a111' test 
aaa
111
bbb
ccc

有某aaa字符串行的上一行加

$ sed '/aaa/i111' test 
111
aaa
bbb
ccc

4.10 多匹配模式

$ nl 1.txt 
     1  This is my cat,my cat's name is betty
     2  This is my dog,my dog's name is frank
     3  This is my fish, my fish's name is george
     4  This is my goat,my goat's name is adam

4.11.1 管道多匹配

去掉 1.txt 中第三行及后面的内容,并把 name 替换成 mingzi:

$ nl 1.txt | sed '3,$d' | sed 's/name/mingzi/g'
     1  This is my cat,my cat's mingzi is betty
     2  This is my dog,my dog's mingzi is frank

4.11.2 -e 多匹配

去掉 1.txt 中第三行及后面的内容,并把 name 替换成 mingzi:

$ nl 1.txt | sed  -e  '3,$d'  -e  's/name/mingzi/g'   
     1  This is my cat,my cat's mingzi is betty
     2  This is my dog,my dog's mingzi is frank

4.12.3 ; 多匹配

去掉 1.txt 中第三行及后面的内容,并把 name 替换成 mingzi:

$ nl 1.txt | sed '3,$d; s/name/mingzi/g'       
     1  This is my cat,my cat's mingzi is betty
     2  This is my dog,my dog's mingzi is frank
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
3月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
2月前
|
机器学习/深度学习 Linux Perl
Linux文本处理三剑客之sed详解
这篇博客详细讲解了Linux中的文本处理工具sed的使用方法和常用命令。
168 9
Linux文本处理三剑客之sed详解
|
2月前
|
Linux Perl
Linux之sed命令
Linux之sed命令
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
430 2
|
2月前
|
Linux Perl
6-20|linux sed命令
6-20|linux sed命令
|
3月前
|
Linux Shell Perl
在Linux中,如何使用sed命令进行文本替换?
在Linux中,如何使用sed命令进行文本替换?
|
3月前
|
数据挖掘 Linux Perl
在Linux中,awk和sed命令的作用?
在Linux中,awk和sed命令的作用?
|
3月前
|
Linux BI 数据处理
在Linux中,如何使用awk和sed进行文本处理?
在Linux中,如何使用awk和sed进行文本处理?
|
4月前
|
Shell Linux C语言
|
4月前
|
存储 Unix Linux
探索Linux中的sed命令:强大的文本处理工具
`sed`是Linux/Unix的流编辑器,用于文本替换、删除、新增等操作,无需直接编辑文件。它逐行处理输入,存储在模式空间,执行脚本后输出。主要特点是非交互、支持正则表达式和简洁语法。示例:`sed 's/apple/orange/g' example.txt`替换文本,`/error/d`删除包含"error"的行,`a\---`在每行后加"---"。使用时注意备份、测试命令和理解正则表达式。