Linux Command sed 文本处理
Linux Command sed 文本处理
2023-09-11 14:15:46 时间
Linux Command sed 文本处理
文章目录
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
相关文章
- Linux学习之文件属性chattr权限与sudo权限(十二)
- linux驱动开发--字符设备:信号量
- Linux设置Memcached开机启动
- Linux网络下载命令 wget 简介
- linux 安装 Django14
- 每天一个linux命令(23):Linux 目录结构
- 每天一个linux命令(14):head 命令
- [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统
- Linux动态链接库的使用
- linux 修改图片的尺寸
- Linux问题故障定位
- Linux firewall防火墙详解(二)——firewall配置
- Linux Ubuntu22.04 docker安装企业微信(docker安装方式,非纯deepin-wine)
- linux userdel删除用户命令
- 信号概述 硬件异常将产生信号 进程间通信概述 进程间通信 进程间通信功能 Linux 操作系统支持的主要进程间通信的通信机制 linux 进程间通信(IPC)由以下几个部分发展而来 数据传输 信号
- Linux 常用命令全拼
- Linux命令: 在线使用linux命令环境
- L80.linux命令每日一练 -- 第11章 Linux系统管理命令 -- ntsysv和setup
- L72.linux命令每日一练 -- 第十章 Linux网络管理命令 -- mail和nslookup
- L58.linux命令每日一练 -- 第九章 Linux进程管理命令 -- pgrep和kill
- L46.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- w和who
- L2.linux命令每日一练 -- 第一章 Linux命令行简介
- 查看linux系统配置 查询Linux配置
- geo ftp环境变量 export source ~/.bashrc Linux中filezilla下载ftp文件 ftp.ncbi.nlm.nih.gov linux下载 ftp下载geo非原始数
- linux top命令及结果详解 top -p 查看Linux程序运行进程
- Vs2012于Linux应用程序开发(4):公共财产的定义
- 【Linux】linux经常使用基本命令
- 错了我的 “宝”!测试人员必会的Linux命令熬夜整理出来了...【建议收藏】
- 什么是挂载,Linux挂载详解
- Qt生成和调用动态库dll,和静态库.a(windows和linux通用)
- Linux 日志管理介绍