linux sed批量修改替换文件中的内容/sed特殊字符

news2024/11/18 22:27:51

sed系列文章

  1. linux常用命令(9):sed命令(编辑/替换/删除文本)
  2. linux sed命令删除一行/多行_sed删除第一行/linux删除文件某一行
  3. linux sed批量修改替换文件中的内容/sed特殊字符

文章目录

  • sed系列文章
  • 一、sed替换文本语法
    • 1.1、基础语法
    • 1.2、高阶语法
  • 二、实战/实例
    • 2.1、批量替换文件中的内容
    • 2.2、字符串中包含特殊字符
      • 2.2.1、方式一、对特殊字符进行转义
      • 2.2.2、方式二、更换分隔符
    • 2.3、一些特殊字符的使用/替换指定的行
    • 2.4、多个替换在同一个命令中执行
    • 2.5、查找文件并替换内容
    • 2.6、修改文件的同时备份文件
    • 2.7、修改每一行第n次出现的内容
    • 2.8、sed n p(一般和sed s替换一起使用 sed -n 's/pattern/replacement/p')
    • 2.9、sed p用法(查看第几行、范围打印)
    • 2.10、sed w file(将缓冲区中的内容写到指定的 file 文件中)

一、sed替换文本语法

1.1、基础语法

若只是想全局修改文件中的指定内容,掌握此语法就够了,不用再看高阶语法。

# 批量修改文件中的内容
sed -i 's/原字符串/替换字符串/g' filename

说明:

  1. -i:直接修改文件中的内容,并且不在屏幕上输出。不加-i不会修改文件中的内容且会将执行结果输出在屏幕上。
  2. s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个“原字符串”,所有的 “原字符串”都会被替换为 “替换字符串”。如果没有 g 命令,则只将每一行的第一个“原字符串”替换为 “替换字符串”。

1.2、高阶语法

此语法可以修改指定的行、范围修改(如:第二到第五行)等等。

# 批量修改文件中的内容
sed -i '[address]s/pattern/replacement/flags' filename

说明:

  1. -i:直接修改文件中的内容,并且不在屏幕上输出。不加-i不会修改文件中的内容且会将执行结果输出在屏幕上。
  2. address 表示指定要操作的具体行,pattern 指的是需要替换的内容,replacement 指的是要替换的新内容。
  3. s 命令用于替换。
address用法如下:
用法说明
address数字,表示第几行。如3指第三行
address,address1数字,表示从第几行到第几行。如3,5 从第三行到第五行
$表示最后一行。如2,$ 从第二行到最后一行
此命令中常用的 flags 标记如表所示:
flags 标记功能
n1~512 之间的数字,表示指定要替换的字符串在一行中出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;
g对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;
p会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。
w file将缓冲区中的内容写到指定的 file 文件中;
&用正则表达式匹配的内容进行替换;
\n匹配第 n 个子串,该子串之前在 pattern 中用 指定。
\转义(转义替换部分包含:&、\ 等)。

二、实战/实例

2.1、批量替换文件中的内容

# 将aa.txt文件中所有的男替换为man
sed -i 's/男/man/g' aa.txt

在这里插入图片描述

2.2、字符串中包含特殊字符

若原字符串或替换字符串中包含特殊字符,可以通过以下方式进行解决。

2.2.1、方式一、对特殊字符进行转义

假如sed s命令中原字符串与替换字符串中包含特殊字符可以转义,特殊字符包含:/、& 等等。

# 示例1:将|替换为&。 字符中包含&,对&进行转义
sed -i 's/|/\&/g' *.txt

# 示例2:将/app/name替换为/user/demo 。字符串中包含/,对/进行转义
sed -i 's/\/app\/name/\/user\/demo/g' *.txt

在这里插入图片描述

2.2.2、方式二、更换分隔符

我们上面讲过sed的语法如下。使用/进行分割,sed是允许其他分隔符的:不论什么字符,紧跟着s后面的都会被认为是分隔符。

# 批量修改文件中的内容
sed -i 's/原字符串/替换字符串/g' filename

其他分隔符示例:

[root ~]$ echo "this is /a/b/c" | sed 's#/a/b/c#/x/y/z#g'
this is /x/y/z
[root ~]$ echo "this is /a/b/c" | sed 's@/a/b/c@/x/y/z@g'
this is /x/y/z
[root ~]$ echo "this is /a/b/c" | sed 's!/a/b/c!/x/y/z!g'
this is /x/y/z
[root ~]$ echo "this is /a/b/c" | sed 's|/a/b/c|/x/y/z|g'
this is /x/y/z
[root ~]$ echo "this is /a/b/c" | sed 's_/a/b/c_/x/y/z_g'
this is /x/y/z

这些紧跟在s后面的字符(#、@、!、|、_)都可以作为分隔符,换成这样的表达方式就会清晰很多,推荐使用竖线(|)。当然,如果是输入源/输出内容中有分隔符,依然需要使用反斜杠进行转义。

在这里插入图片描述

2.3、一些特殊字符的使用/替换指定的行

”^”表示行首
”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行)

# 注意这里的 " & " 符号,如果没有 “&”,就会直接将匹配到的字符串替换掉
sed 's/^/添加的头部&/g'      #在所有行首添加
sed 's/$/&添加的尾部/g'      #在所有行末添加
sed '2s/原字符串/替换字符串/g'  #替换第2行
sed '$s/原字符串/替换字符串/g'   #替换最后一行
sed '2,5s/原字符串/替换字符串/g' #替换2到5行
sed '2,$s/原字符串/替换字符串/g' #替换2到最后一行 

在这里插入图片描述

2.4、多个替换在同一个命令中执行

多个替换可以在同一条命令中执行,用分号”;”分隔,其格式为:

# 同时执行两个替换规则
sed 's/^/添加的头部&/g;s/$/&添加的尾部/g' 

2.5、查找文件并替换内容

有时候目录下有多个文件都需要修改,可以通过grep命令查找出相应的文件,然后批量替换掉。

sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`

在这里插入图片描述

2.6、修改文件的同时备份文件

有时候我们想要一种效果是修改前先备份文件,则可使用以下命令

sed -i.bak 's/原字符串/替换字符串/g' filename

-i.bak 表示直接对原文件进行编辑的同时做备份;

在这里插入图片描述
从上图可以看出,sed -i.bak是先将要修改的文件备份后再修改的。

ps: -i后面不一定要是bak,可以指定任何内容,备份文件上会以指定内容结尾,如sed -i.2022,则备份文件名以.2022结尾

2.7、修改每一行第n次出现的内容

# 修改每一行第二次出现的内容
sed -i 's/原字符串/替换字符串/2' filename
# 修改每一行第二次到最后的内容
sed -i 's/原字符串/替换字符串/2g' filename

在这里插入图片描述

可以看到,使用数字 2 作为标记的结果就是,sed 编辑器只替换每行中第 2 次出现的匹配模式。

2.8、sed n p(一般和sed s替换一起使用 sed -n ‘s/pattern/replacement/p’)

我们知道,-n 选项会禁止 sed 输出,但 p 标记会输出修改过的行,将二者匹配使用的效果就是只输出被替换命令修改过的行,例如:

[root@centos test]# cat aa.txt
| 1 | tom ||
| 2 | jack||
| 3 | cary||
| 4 | cody||
[root@centos test]# sed 's/tom/tony/p' aa.txt   -- 不加-n时会多次输出
| 1 | tony ||
| 1 | tony ||
| 2 | jack||
| 3 | cary||
| 4 | cody||
[root@centos test]# sed -n 's/tom/tony/p' aa.txt  -- 加-n后只输出修改过的行
| 1 | tony ||
[root@centos test]# 

2.9、sed p用法(查看第几行、范围打印)

sed 与p命令一起可以打印第几行、范围打印(从第几行到第几行)、打印匹配的行。

sed -n "/qwf/p" sed.txt   --查看某一行的信息
sed -n "1p" sed.txt    --查看第1行
sed -n "2p" sed.txt    --查看第2行
sed -n "1,2p" sed.txt   --查看1-2行 
sed -n "1p;3p" sed.txt  --查看第1行第3行
[root@www ~]# cat sed.txt 
123
qfq
root
root
root
qwf
ok
This is a test of the trial script.
This is the second test of the trial script.
 
[root@www ~]# sed   "/root/p" sed.txt  -- 每一行打印一次,p命令会把匹配上的再打印一次
123
qfq
root
root
root
root
root
root
qwf
ok
This is a test of the trial script.
This is the second test of the trial script.
 
[root@www ~]# sed -n  "/root/p" sed.txt  --查找某一行的关键字使用-n p选项,n是静默,p是打印
root
root
root
 
[root@www ~]# sed -n 's/disabled/enforcing/p' /etc/selinux/config 
#     enforcing - No SELinux policy is loaded.
SELINUX=enforcing
 
[root@www ~]# sed -n "/qwf/"p sed.txt   --查看某一行的信息
qwf
[root@www ~]# sed -n "1p" sed.txt 
123
[root@www ~]# sed -n "2p" sed.txt 
qfq
 
[root@www ~]# sed -n "1,2p" sed.txt   --查看1-2行 
123
qfq
[root@www ~]# sed -n "1p;3p" sed.txt  --查看第1行第3行
123
root

2.10、sed w file(将缓冲区中的内容写到指定的 file 文件中)

w 命令用来将文本中指定行的内容写入文件中,此命令的基本格式如下:

[address]w filename

下面的例子是将数据流中的前两行打印到一个文本文件中:

[root@localhost ~]# sed '1,2w test.txt' data6.txt
This is line number 1.
This is line number 2.
This is line number 3.
This is line number 4.
[root@localhost ~]# cat test.txt
This is line number 1.
This is line number 2.

示例:将命中的行保存到文本中

[root@centos test]# cat data.txt
This is a test line.
This is a different line.
[root@centos test]# sed 's/test/trial/w test.txt' data.txt  --将命中的内容保存到test.txt文件中
This is a trial line.
This is a different line.
[root@centos test]# cat test.txt
This is a trial line.
[root@centos test]# 

在这里插入图片描述

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

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

相关文章

群晖7.2使用Docker安装容器魔方结合内网穿透实现远程访问

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1. 拉取容器魔方镜像2. 运行容器魔方3. 本地访问容器魔…

SpringTask

SpringTask是一种用于定时任务调度的框架周期性任务、定时任务需要SpringTask框架 比较出名的框架有三种: (1)SpringTask(没有很大的并发量需求量,用SpringTask足够) (2)Quartz(老牌的定时任务&#xff0c…

在IDEA 2023.3中Jrebel debug 模式无法启动

目录 版本说明问题描述解决方式 版本说明 IDEA:IntelliJ IDEA 2023.3 (Ultimate Edition) Jrebel: JRebel Agent 2023.4.2 (202312041035) 问题描述 在IDEA中启动debug模式时无法正常启动 解决方式 在 IDEA 2023.3 版本修改了默认的配置&#xff…

仿淘宝、京东首页icons横向滑动效果

一、效果展示 淘宝&#xff1a; 京东&#xff1a; 二、话不多说&#xff0c;直接上demo 案例效果 代码 <template><div class"demo-page"><h1>滚动效果</h1><div classicons-slide-wrapper><div class"icons-container&quo…

k8s节点not ready

开发小伙伴反应&#xff0c;发布应用失败。检查后发现有个虚拟机挂掉了 启动后先重启服务&#xff1a;&#xff08;一般是自启动&#xff0c;自动拉起pod服务&#xff09; service docker restart docker ps |grep kube-apiserver|grep -v pause|awk ‘{print $1}’|xargs -i …

【SpringBoot】配置文件

配置文件官网 1. 配置方式 application.propertiesapplication.yml / application.yaml 2. 自定义配置信息 将实体类中的本应该写死的信息写在属性配置文件中。 可以使用 Value("${键名}") 获取&#xff0c;也可以使用 ConfigurationProperties(prefix"前…

C++_类的定义和使用

目录 1、类的引用 1.1 类的成员函数 1.2 类成员函数的声明和定义 2、类的定义 2.1 类的访问限定&#xff08;封装&#xff09; 3、类重名问题 4、类的实例化 4.1 类的大小 5、隐含的this指针 5.1 空指针问题 结语&#xff1a; 前言&#xff1a; C的类跟c语言中的结…

【Vue】日期格式化(全局)

系列文章 【Vue】vue增加导航标签 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/134965353 【Vue】Element开发笔记 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/133947977 【Vue】vue&#xff0c;在Windows IIS平台…

Tomcat的结构分析和请求处理原理解析

目录 Tomcat服务器&#xff1f;Tomcat结构处理请求流程Tomcat作用其他的web服务器 Tomcat服务器&#xff1f; 我们经常开口闭口“服务器”、“服务器”的&#xff0c;其实“服务器”是个很容易引发歧义的概念 其实&#xff0c;Tomcat服务器 Web服务器 Servlet/JSP容器&#…

java简易制作-王者荣耀游戏

一.准备工作 首先创建一个新的Java项目命名为“王者荣耀”&#xff0c;并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 创建一个名为“img”的文件夹来储存所需的图片素材。 二.代码呈现 package com.sxt; import javax…

人工智能联盟的首件神兵利器——“Purple Llama” 项目,旨为保护工智能模型安全性

Meta公司&#xff08;Meta Platform Inc&#xff09;&#xff0c;原名Facebook&#xff0c;创立于2004年2月4日&#xff0c;市值5321.71亿美元。总部位于美国加利福尼亚州门洛帕克。 Meta 公司推出了名为“Purple Llama”的项目&#xff0c;旨在保护和加固其开源人工智能模型。…

【MODBUS】Modbus的3种传输方式

概述 1979年&#xff0c;Modicon 首先推出了串行Modbus标准&#xff0c;后来由于网络的普及&#xff0c;需要更高的传输速度&#xff0c;1997年制定了基于TCP网络的Modbus标准。 所以总的可分为两个传输模式:基于串行链路的和基于以太网TCP/IP的。但是我个人还是习惯分为3种传…

【MySQL 索引】InooDB 索引实现

1 索引定义 维基百科对数据库索引的定义: 数据库索引是数据库管理系统&#xff08;DBMS&#xff09;中的一个排序数据结构, 以协助快速查询和更新数据库表中的数据。 MongoDB对索引的定义: 索引是一种特殊的数据结构, 以有序和便于遍历的形式存储数据集合中特定字段或一组字段…

蓝桥杯专题-真题版含答案-【制作表格】【5位黑洞数】【泊松分酒】【亲密数】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

UG NX二次开发(C++)-库缺少需要的入口点的原因与解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、“库缺少需要的入口点”错误展示3、可能出现的原因与解决方案3.1 对于采用CTRL+U方式调用3.2 对于menu菜单下调用1、前言 在UG NX二次开发过程中,有时会遇到形形色色的bug,比如有个读…

可视化监控云平台/智能监控EasyCVR如何使用脚本创建ramdisk挂载并在ramdisk中临时运行

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防管理视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存…

【Spring Boot】内网穿透实现远程调用调试

文章目录 1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址 4.…

管理类联考——英语二——考点+记忆篇——大作文——表格

大作文Remarkablechangesconcerning主题词havebeenwitnessedinTheabovechartthoroughlyrevealedthefascinatingissue.Onecanseethat年份1,事物1wasonly数字1.ButwithinashortdurationofXyears,事物1bumpedto数字2in年份2.Apartfromthat,事物2hasenjoyedaslightdeclineduringthe…

基于3D-CGAN的跨模态MR脑肿瘤分割图像合成

3D CGAN BASED CROSS-MODALITY MR IMAGE SYNTHESIS FOR BRAIN TUMOR SEGMENTATION 基于3D-CGAN的跨模态MR脑肿瘤分割图像合成背景贡献实验方法Subject-specific local adaptive fusion&#xff08;针对特定主题的局部自适应融合&#xff09;Brain tumor segmentation model 损失…

外汇天眼:如果美元开始降息,会为市场带来哪些影响?

一、美元降息的影响 美元一旦开始降息&#xff0c;将对全球经济产生重要影响。 降息政策将带动美国内部的消费和投资增长。 透过降低借贷成本&#xff0c;鼓励个人和企业增加支出&#xff0c;刺激经济活动。 以最新数据为例&#xff0c;美国的消费者信心指数正在上升&#xff…