Linux处理文件sed

一、什么是sed

	sed全称(stream editor)流式编辑器,Sed主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等,工作流程如下sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出,或者使用sed -i选项-i选项就是将本该输出到屏幕上的内容输出/流入文件中

sed命令格式如下

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
注意:
sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0
只有当命令存在语法错误时,sed的退出状态才不是0

二. 作用

作用: 可以直接编辑修改文件内容,可以对文件进行增删改查
语法:
sed 参数 “[定位 指令]” 文件路径
参数:

	  -e 允许多项编辑-r 扩展正则-n 取消默认输出(模式空间的内容输出)-i 写入文件  改变了输出流向,对源文件修改 (把流向屏幕的内容,流入文件中)-i.bak 修改文件时会创建备份文件,防止手误-a 指定行后添加信息-i 指定行前添加信息-f 指定sed脚本文件名

指令:

p 打印到屏幕
d 删除
I 忽略大小写
!表示取反
s/// 替换
e 识别多条指令 
c将整行内容清除后替换为c后面指定的内容
指令可以用;号连接多条,如1d;3d;5d代表删除1,3,5

三. 定位

1. 行定位

a.打印/etc/passwd文件的第10行

[root@manager ~]# sed -n '10p' /etc/passwd

b.打印第5行到第10行

[root@manager ~]# sed -n '5,10p' /etc/passwd

c.从第5行开始,往后打印5行,包括第5行

[root@manager ~]# sed -n '5,+5p' /etc/passwd

d.打印/etc/passwd中开头为root的行开始,到开头为ftp的行结束的内容

[root@manager ~]# sed -n '/^root/,/ftp/p' /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

e.打印/etc/passwd中第8行开始,到含有/sbin/nologin的内容的行结束内容

[root@manager ~]# sed -n '8,/sbin\/nologin/p' /etc/passwd

f.取第七行或十二行

[root@localhost ~]# sed -n "7p;12p" /etc/selinux/config SELINUX=enforcingSELINUXTYPE=targeted 

2.正则表达式定位

与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。正则表达式是
括在斜杠间(/xxx/)的模式,用于查找和替换,以下是sed支持的元字符。

	# 使用基本元字符集	^, $, ., *, [], [^], \< \>,\(\),\{\}# 使用扩展元字符集	?, +, { }, |, ( )# 使用扩展元字符的方式:转义,如\+-r参数,如sed -r

示例:
“/love/” 包含love的行
“/^love/” 以love开头的行
“/love$/” 以love结尾的行
a.根据行号筛查文件信息:
p打印

[root@localhost ~]# sed -n "/root/p" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

b.根据内容筛选文件信息-
取消selinux 配置文件的空行和注释行

[root@localhost ~]# sed -rn '/^#|^$/!p' /etc/selinux/config 
SELINUX=enforcing
SELINUXTYPE=targeted 
[root@localhost ~]#cat /etc/selinux/config| egrep -v '^$|^#'
SELINUX=enforcing
SELINUXTYPE=targete
[root@localhost ~]# cat -n /etc/selinux/config 1	2	# This file controls the state of SELinux on the system.3	# SELINUX= can take one of these three values:4	#     enforcing - SELinux security policy is enforced.5	#     permissive - SELinux prints warnings instead of enforcing.6	#     disabled - No SELinux policy is loaded.7	SELINUX=enforcing8	# SELINUXTYPE= can take one of three values:9	#     targeted - Targeted processes are protected,10	#     minimum - Modification of targeted policy. Only selected processes are protected. 11	#     mls - Multi Level Security protection.12	SELINUXTYPE=targeted 

c.打印jfedu.txt文本中第一行与最后一行

sed    -n '1p;$p'           jfedu.txt

d. 删除jfedu.txt第一行至第三行、删除匹配行至最后一行

sed       '1,3d'             jfedu.txt
sed       '/jfedu/,$d'         jfedu.txt

e. 删除jfedu.txt最后一行

sed       '$d'             jfedu.txt

f.在jfedu.txt查找jfedu所在行,并在其下一行添加word字符,a表示在其下一行添加字符串:

sed    '/jfedu/aword'      jfedu.txt

g. 在jfedu.txt查找jfedu所在行,并在其上一行添加word字符,i表示在其上一行添加字符串

sed    '/jfedu/iword'       jfedu.txt

四。增加编辑命令

命令 	含义
a	    行后追加内容 append
i	    行前追加内容 insert
r	    读入外部文件,行后追加
w	    将匹配行写入外部文件

1. 行号a (append)

[root@localhost ~]# sed "1ahello" a.txt111hello222333
[root@localhost ~]# sed "2ahello" a.txt
111
222
hello
333
[root@localhost ~]# sed "1,2ahello" a.txt # 第一行到第三行,每行后都增加hello
111
hello
222
hello
333
# 第一行和第三行后添加hello
[root@manager ~]# sed -e '1ahello' -e '3ahello' a.txt 
111
hello
222
333
hello[root@localhost ~]# sed '$a hello' a.txt # 在最后一行末尾添加 用单引号
111
222
333
hello
#将/etc/fstab文件的内容追加到a.txt文件的第2行后面
[root@manager ~]# sed '2r /etc/fstab' a.txt # 不能加a#将/etc/inittab文件内容追加到/etc/passwd文件匹配/bin/sync行的后面
sed '/\/bin\/rsync/r /etc/inittab' /etc/passwd#将passwd文件匹配到/bin/bash的行追加到/tmp/a.txt文件中
[root@manager ~]# sed  '/\/bin\/bash/w /tmp/a.txt' /etc/passwd

在指定行前插入信息-行号i (insert)

[root@localhost ~]# sed "1ihello" a.txthello111222333
方法1:
## 在第一行后面添加两行hello world 
[root@localhost ~]# sed "1ahello\nworld" a.txt 
111
hello
world
222
333
方式2[root@localhost ~]# sed -e "1ahello" -e "1a world" a.txt
111
hello
world
222
333

五. 修改文件信息

命令	含义
1s/old/new/	替换第1行内容old为new
1,10s/old/new/	替换1行到10行的内容old为new
1,+5s/old/new/	替换1行到6行的内容old为new
/pattern1/s/old/new/	替换匹配pattern1的内容old为new
/pattern1/,/pattern2/s/old/new/	替换匹配到pattern1的行直到
匹配到pattern2的所有行内容old为new
10,/pattern1/s/old/new/	替换第10行直到匹配到pattern1的所有行内容old为new

有如下文件内容

[root@localhost ~]# cat a.txt
aaa
bbb
ccc
aaa hello aaa AAA
  1. 匹配到aaa替换为AAA, 默认只匹配每行的第一次出现
[root@localhost ~]# sed "s/aaa/AAA/" a.txt
AAA
bbb
ccc
AAA hello aaa AAA
world bbb bbb
ddd
  1. 替换每行的所有aaa为AAA g参数
[root@localhost ~]# sed "s/aaa/AAA/g" a.txt
AAA
bbb
ccc
AAA hello AAA AAA
world bbb bbb
ddd
  1. 替换指定行,例如只替换第四行
[root@localhost ~]# sed "4s/aaa/AAA/g" a.txt
aaa
bbb
ccc
AAA hello AAA AAA
world bbb bbb
ddd
  1. 替换第一行到第四行
[root@localhost ~]# sed "1,4s/aaa/AAA/g" a.txt
AAA
bbb
ccc
AAA hello AAA AAA
world bbb bbb
ddd
  1. 替换第一行的aaa,或第五行的bbb
[root@localhost ~]# sed "1s/aaa/AAA/g;5s/bbb/BBB/g" a.txt
AAA
bbb
ccc
aaa hello aaa AAA
world BBB BBB
ddd
  1. 在jfedu.txt查找www的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:
sed   '/www/s/^/&word/'    jfedu.txt
  1. Sed读取系统变量,变量替换:
WEBSITE=WWW.JFEDU.NET
Sed  “s/www.jd.com/$WEBSITE/g” jfedu.txt
  1. 修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改成disabled、!s表示不包括SELINUX行:
sed  -i   '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
sed  -i   '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十七、(正点原子)Linux LCD驱动

一、Framebuffer设备 在 Linux 中应用程序通过操作 RGB LCD 的显存来实现在 LCD 上显示字符、图片等信息。 先来看一下裸机 LCD 驱动如下&#xff1a; ①、初始化 I.MX6U 的 eLCDIF 控制器&#xff0c;重点是 LCD 屏幕宽(width)、高(height)、 hspw、 hbp、 hfp、 vspw…

【Python】连接MySQL数据库:详细教程与示例代码

文章目录 1. 安装必要的库2. 建立与MySQL的连接3. 执行SQL查询4. 插入数据5. 更新数据6. 删除数据7. 错误处理8. 小结 在数据驱动的开发中&#xff0c;连接数据库是一个至关重要的技能。Python作为一门强大的编程语言&#xff0c;提供了多种方式连接并操作MySQL数据库。本文将详…

【时时三省】(C语言基础)函数和数组

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 函数 跟数学里面的函数很相似 数组 一组相同类型的元素的集合 比如把5个整形1-5存起来 int arr&#xff3b;10&#xff3d;&#xff1d;&#xff5b;1&#xff0c;2&#xff0c;3&#x…

转型做产品经理,考NPDP有什么好处?

机会是留给有准备的人的&#xff0c;如果此刻的你想要转岗但又没有方向&#xff0c;建议你可以考虑下产品经理这个岗位&#xff0c;产品经理是一个非技术型的岗位&#xff0c;但是懂一些技术相关的知识会更好的和技术部门沟通&#xff0c;能更好的从技术部门的角度理解需求的可…

浏览器打开抽奖系统html

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>在线抽奖 随机选取 自动挑选</title> <script src"https://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <style> body {…

验证跨设备挂载文件系统可行性命令

1.安装服务器端nfs-server-kernel 软件 sudo apt-get install nfs-kernel-server 2.配置服务器端软件路径 sudo vim /etc/default/nfs-kernel-server sudo service nfs-kernel-server statussudo service nfs-kernel-server restartsudo service nfs-kernel-server statu…

用Python爬虫能实现什么?

Python 是进行网络爬虫开发的一个非常流行和强大的语言&#xff0c;这主要得益于其丰富的库和框架&#xff0c;比如 requests、BeautifulSoup、Scrapy 等。下面我将简要介绍 Python 爬虫的基础知识和几个关键步骤。 1. 爬虫的基本原理 网络爬虫&#xff08;Web Crawler&#…

antdesgin table 组件下载成excel

文章目录 发现宝藏一、需求二、报错 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 一、需求 原组件如下&#xff0c;需要添加下载功能 import React, { useState } from rea…

Spring Boot + Spring Cloud 入门

运行配置 java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.profiles.activetest --my1.age32 --debugtrue "D:\Program Files\Redis\redis-server.exe" D:\Program Files\Redis\redis.windows.conf "D:\Program Files\Redis\redis-cli.exe" &q…

Go语言 Import导入

本文主要介绍Go语言import导入使用时注意事项和功能实现示例。 目录 Import 创建功能文件夹 加法 减法 主函数 优化导入的包名 .引入方法 总结 Import 创建功能文件夹 做一个计算器来演示&#xff0c;首先创建test文件夹。 加法 在test文件夹中创建add文件夹&#xff…

别卷模型,卷应用:从李彦宏的AI观点谈起

2024年7月4日&#xff0c;世界人工智能大会暨人工智能全球治理高级别会议在上海世博中心隆重召开。百度创始人、董事长兼首席执行官李彦宏在产业发展主论坛上的发言&#xff0c;引起了广泛关注。他提出&#xff1a;“大家不要卷模型&#xff0c;要卷应用&#xff01;”这一观点…

《简历宝典》17 - 简历中“技术能力”,如何丰满且有层次,前端篇

这一节开始对技术能力模块做讲解&#xff0c;我们身边的这些互联网IT从业者们&#xff0c;前端开发、Java开发、软件测试又或者是其他职位的开发者们&#xff0c;技术能力这个模块是绕不过去的&#xff0c;从简历上看&#xff0c;这个模块体现了我们之前软件工作生涯中的技术功…

大厂面试-基本功

大厂面试第4季 服务可用性多少个9是什么意思遍历集合add或remove操作bughashcode冲突案例BigdecimalList去重复IDEA Debugger测试框架ThreaLocal父子线程数据同步 InheritableThreadLocal完美解决线程数据同步方案 TransmittableThreadLocal 服务可用性多少个9是什么意思 遍历集…

Tensor列表索引本质

张量列表索引本质 单列表索引 将原张量shape对应位置数字更改为索引列表的形状 data torch.randn((9, 512, 30)) index_list [0, 1, 3] print(data[:, index_list].shape)[[9, 3, 30]] # torch.Size([1, 6, 5]) index2_list torch.IntTensor([[[4, 5, 6, 7, 8],[4, 5, 6,…

【C++高阶】哈希函数底层原理探索:从算法设计到实现优化

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;模拟实现 map与set &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀哈希 &#x1f4da;1. unord…

比较 WordPress 、 Baklib 和 BetterDocs

对于希望管理其产品和服务的在线文档或知识库以支持其客户和员工的组织来说&#xff0c;市场上有太多的平台和工具。一些组织使用 WordPress 作为 Web 内容管理&#xff0c;并打算使用可用的插件。如果您是这样的组织之一&#xff0c;正在考虑使用广泛使用的 WordPress 插件之一…

(ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类

文章目录 Robust deep alignment network with remote sensing knowledge graph for zero-shot and generalized zero-shot remote sensing image scene classification相关资料摘要引言遥感知识图谱的表示学习遥感知识图谱的构建实体和关系的语义表示学习创建遥感场景类别的语…

ts踩坑!vue3中ts文件用export导出公共方法的ts类型定义

当我们有一个ts文件&#xff0c;定义并export出该function&#xff0c;其中方法里边有定义的变量&#xff0c;方法、钩子函数等多种&#xff0c;并最终return出该变量、方法。 此时 ts规则校验会让我们返回该函数类型。如下 export default function () {const chart ref();c…

Java基础-序列化、泛型、1.8新特性、其他

目录 序列化 什么是序列化&#xff1f;什么是反序列化&#xff1f; Serializable 接口有什么用&#xff1f; serialVersionUID 又有什么用&#xff1f; Java 序列化不包含静态变量吗&#xff1f; 如果有些变量不想序列化&#xff0c;怎么办&#xff1f; 说说有几种序列化…

为什么 centos 下使用 tree 命令看不见 .env 文件

CentOS 下使用 tree 命令看不到 .env 文件主要有两个可能的原因&#xff1a; 默认情况下&#xff0c;tree 命令不显示隐藏文件。在 Linux 系统中&#xff0c;以点(.)开头的文件或目录被视为隐藏文件。.env 文件就属于这种隐藏文件。 您可能没有安装 tree 命令。如果在 CentOS …