转义sed替换模式字符串

转义特殊字符——printf命令、sed命令 shell脚本中,一些字符串引用了特殊字符,但不能通过单引号原样输出,这时候就需要通过转义符对特殊符号进行转义。 阅读详情

本文首发于我的Github博客
本文记录了作者在使用sed命令进行文本替换时,对于使用到的替换模式进行转义处理使用到的sed命令,简单来说:

  • 使用sed -e 's/[]\/$*.^[]/\\&/g'即可对输入字符串进行转义

场景

sed命令常常被用来对文本做处理,其中一个最经常用到的处理就是替换,替换的语法如下:

echo $STRING | sed -e 's/<match_pattern>/<replace_pattern>/g'

当然也可以有其他的变化,不过这是作者使用的最多的方式。

在使用这些的时候,我们可能会在match_pattern和replace_pattern中引用变量,已达到分别管理和增强可读性的目的,比如

# dummy text
TEXT="affaflns,fakfnakn"
REPLACE="ff"
REPLACED_TEXT=$(echo $TEXT | sed -e "s/a/$REPLACE/g")

但是,如果上面引用的REPLACE里面有特殊字符,我们就会遇到问题,比如

# dummy text
TEXT="affaflns,fakfnakn"
REPLACE="/a"
# 有问题
REPLACED_TEXT=$(echo $TEXT | sed -e "s/a/$REPLACE/g")

我们的本意是将a替换为/a,但是,使用这几条命令,会得到

sed: 1: "s/a//a/g
": bad flag in substitute command: 'a'

这里的原因就是/a中的/是一个特殊字符,如果希望得到我们上述的效果,应该这么操作

# dummy text
TEXT="affaflns,fakfnakn"
REPLACE="\/a"
# 成功
REPLACED_TEXT=$(echo $TEXT | sed -e "s/a/$REPLACE/g")

我们通过\/进行转义,取得了成功,但是这种方式使得我们编写replace_pattern变得麻烦,而且很不直观,我们希望有一个函数来达到如下效果

# dummy text
TEXT="affaflns,fakfnakn"
REPLACE="/a"
REPLACE=$(func $REPLACE)
REPLACED_TEXT=$(echo $TEXT | sed -e "s/a/$REPLACE/g")

也就是说,编写replace_pattern时,可以直接编写,而后使用一个函数或者命令自动转义再使用

解决方案

stackoverflow

使用sed -e 's/[]\/$*.^[]/\\&/g'即可

方案解析

我们这次的方案就是对原生的replace_pattern做一次替换:

  • match_pattern为[]\/$*.^[]
    • 这个正则表达式的结构很具有迷惑性,其实它是一个大的bracket group
    • 也就是说,实际上是[ ]\/$*.^[ ]的结构
    • 意味着匹配]\/$*.^[中的任一字符
  • replace_pattern为\\&
    • 这个replace_pattern用到了一个转义字符和一个特殊字符
    • 转义字符\\表示的就是\
    • 特殊字符&表示的是match_pattern匹配到的内容

综合起来,这个替换语句就是把]\/$*.^[前面全部加上一个斜杠,进行转义

别再只当代码阅读器了!手把手教你用Understand的实体定位器和信息浏览器,5分钟精准定位代码逻辑 本文深入解析Understand代码分析工具的高级功能,重点介绍实体定位器和信息浏览器的实战应用。通过5分钟快速定位代码逻辑的技巧,帮助开发者从代码阅读者升级为逻辑侦探,提升大型代码库的分析效率。文章包含过滤搜索、调用链追踪等实用方法,是掌握Understand核心功能的必备指南。 阅读详情

相关推荐

TSMaster二次开发实战:如何用Python搞定CAN/CANFD事件回调(附完整代码)

本文详细介绍了如何利用Python进行TSMaster二次开发,实现CAN/CANFD事件回调功能。通过实战代码演示,讲解了预发送与后处理回调的核心区别、注册流程、资源管理及性能优化技巧,帮助工程师高效构建自动化测试与数据监控应用。

star的博客 668

sed命令转义符

sed命令需要处理的转义符,目前遇到的只有 / 比如將文本中的 /src/main 替换成 /dbk/ert 使用sed命令 sed -i 's/src/main/dbk/ert/g' file 执行是不生效的,需要执行如下的命令 sed -i 's/src\/main/dbk\/ert/g' file 即可 如果是脚本命令,传入的代替换及要替换的文本中可能含有 / 字符,则需要进行如下替换 old 和 new为脚本环境传入的变量 sed -i "s#$old#$ne...

龙行九天的专栏 1万+

卡尔曼滤波算法-Kalman Filter Algorithm

Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程主要包括五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新; 用数学公式表示,如下: 状态预测:(1) 其中,X(k|k)是k时...

sunlin972913894的博客 2万+

【Linux】解决脚本实现:sed -i 替换变量,变量中含有特殊转义字符的问题

写脚本时遇到的一个关于sed替换的问题,在此分享一下

Wynne的博客 3万+

AWS入门实践-如何在AWS云上创建一个内外网隔离的生产环境

在 AWS 上建立一个内外网分离的生产环境,可以减少应用服务的暴露面,有效的保证你的应用服务器的安全。通常我们会将web应用放在外网的子网内,数据库服务器等放在内网的子网。我们将按照下图来部署动手实践环境,实现在public subnet的EC2虚拟机可以直接通过互联网可以访问,在Private subnet的EC2虚拟机不能通过互联网直接访问,但是却可以在内部来访问互联网安装应用等等。

weixin_39108752的博客 2994

基因家族的鉴定-基于Windows系统上的HMMER

基因家族的鉴定-基于Windows系统上的HMMER。

liangjinghui123的博客 3242

sed将字符串中的特殊字符进行转义

综合起来,该命令的作用是将字符串中的特殊字符进行转义,将它们变为可以在正则表达式中使用的形式,以防止这些特殊字符在正则表达式中产生歧义。该命令的作用是将字符串中的特殊字符进行转义,使其变为可以在正则表达式中使用的形式。等特殊字符,导致变量可能不是原样输出,这时可以用sed对特殊字符进行转义。在特殊情况下,我们变量引用的字符串中可能包含。

weixin_53389944的博客 1321

Android开发者必看:F2FS文件系统如何优化你的手机存储性能(附实测数据对比)

本文深入解析了F2FS文件系统如何针对闪存特性优化Android设备存储性能。通过对比ext4,F2FS采用追加写和冷热数据分离策略,将随机写转化为顺序写,显著提升写入速度并减少GC卡顿。实测数据显示,其在随机写入和SQLite事务等场景下性能提升显著,为开发者提供了优化应用IO性能的关键思路。

weixin_29248313的博客 325

linux sed中转义字符的替换

在使用sed的时候,经常我们会用来替换字符串,如果被替换的字符串中包含转移字符串怎么办?比如:如果用下面的这种方式,就会替换失败$replace。

swust_chenpeng的专栏 2215

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 638

uniapp - 实现集成调用zebra斑马打印机+打印标签+打印二维码详细实例代码,通过蓝牙连接打印机打印与通过打印机IP和端口两种方式适配斑马打印机(全平台兼容H5、微信小程序、苹果安卓App)

uniapp适配斑马打印机 实现标签打印,uniapp适配斑马打印机实现标签打印,uniapp调用zebra斑马打印机打印标签,uniApp连接传统蓝牙的斑马打印机打印,实现标签打印功能uniapp 蓝牙连接斑马打印机发送zpl指令打印,适配斑马(Zebra)牌打印机,小程序调用蓝牙打印机完整代码,uniapp 打印机wifi链接 蓝牙链接,uniapp斑马打印机,实现二维码标签展示以及打印,APP端连接打印机打印小票和标签,uniapp使用斑马打印中文不出来,打印机连接不上,打印没反应怎么办,打印报错,斑

🏆 前端领域优质创作者 1万+

转义sed替换模式的字符串

In my bash script I have an external (received from user) string, which I should use in sed pattern

p15097962069的博客 515

IgH EtherCAT 从入门到精通:第 29 章 实战:EoE 远程维护通道搭建

摘要:本章详细介绍了基于EoE(Ethernet over EtherCAT)协议的远程维护通道搭建方案。主要内容包括:1)网络架构设计,采用管理网络与EoE子网隔离的方案;2)从站EoE支持确认与IP地址配置,提供API和命令行两种方式;3)路由/交换两种部署模式,重点推荐路由模式并给出自动化配置脚本;4)SSH远程访问配置,包括直接连接和跳板访问两种方式;5)安全加固措施,如防火墙规则、SSH密钥认证等;6)故障恢复机制与性能注意事项。该方案实现了通过EtherCAT网络对从站设备的远程SSH访问、文件

从事嵌入式linux android驱动开发,拥有全栈能力 360

sed 在末尾添加_SED用法分析

sed替换的基本语法为:sed 's/原字符串/替换字符串/'单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线””进行转义,但是单引号”‘”是没有办法用反斜线””转义的,这时候只要把命令中的单引号改为双引号就行了,例如:sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,...

weixin_39890543的博客 2140

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Shell sed总结_20191023(持续更新)

1、简介 Linux sed 命令是利用脚本来处理文本文件。 sed 可依照脚本的指令来处理、编辑文本文件。 Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 Sed 处理shell文件及字符串是一个不错的方式,常用的sed命令可以看看这篇博客 https://blog.youkuaiyun.com/wdz306ling/article/details/800878...

七夏的博客 350

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何用sd Replacer快速替换文本?5个实用技巧让你告别sed复杂操作

sd Replacer是一款直观的命令行查找替换工具,作为sed的现代替代品,它提供了更简洁的语法和更强大的功能,让文本替换工作变得前所未有的简单高效。无论是开发者日常的代码修改,还是普通用户的文本处理需求,sd Replacer都能轻松应对。 ## 为什么选择sd Replacer? 传统的sed命令虽然功能强大,但语法复杂,学习曲线陡峭,常常让新手望而却步。而sd Replacer则以其直

gitblog_01406的博客 965

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

shell中sed学习之替换 \1 \2 \3的几点谜思

今天在学习shell时,无意中碰到了这么一个用

LinuxIPLinux的专栏 8536

sed命令

1. sed替换的基本语法为: sed's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义。 2. 单引号” ‘ ’”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,格式如下: #要处理的字符包含单引号 sed"s/原字符串包含'/替换字符串包含'/" 3. 命令中的三根斜线分隔符可以...

ddddfang的专栏 258

sed and awk学习笔记二

 反斜杠的作用: 在正则表达式中,\反斜杠是用来转义字符用的。但是在替换的时候也可以被用作换行符使用。 文本内容为.AH "Major Heading"。想替换成如下的形式:首先是两个空格行,然后将.AH替换成 @A HEAD=     @A HEAD=Major Heading 脚本如下: 在这里\的作用相当于换行符,这里接连用了2个换行符

349

sed 使用笔记:

一 sed简介: 全名strem editor。一次处理一行内容,处理时把当前处理行存储在临时缓冲区,称为‘模式空间’,用sed命令处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,直到文件末尾。处理时文件内容没有改变,除非使用重定向存储输出。可以用sed -i直接改变文件内容 二 正则表达式: 基本正则表达式和扩展正则表达式。 2.1 基本正则表达式: 点号 " . ": 可...

leixm918的博客 312

【Shell】Sed 删除、替换、增加字符串

Sed语法 删除、替换、增加字符串 删除 # Delete text between patterns, excluding the lines containing these patterns(不删除所在行): sed -i '/PATTERN-1/,/PATTERN-2/{//!d}' input.txt # Delete text between patterns, including the lines containing these patterns(所在行也删除): sed

我的笔记本 4万+

linux 给文件替换字符串/替换内容/替换某行 (shell,sed)

本文是要讲linux 不打开文档/文件的情况下,替换文本内容。 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 。 话题相关 #linux 文件替换字符串 #sed 字符串替换 #linux 替换指定行内容 #linux 替换某行 linux一般用sed来替换文本到指定行。 基本语法 s (substitute)为查找替换命令 # 在输出或打印中,替换字符串。并...

Yu's Notes 12万+

shell sed替换、删除文件中的某个字符串 以及特殊字符

1、将当前目录下包含hello串的文件中,hello字符串替换为hi sed -i "s/hello/hi/g" `grep "hello" -rl ./` 2、将某个文件中的hello字符串替换为hi sed -i "s/hello/hi/g" test.txt 3、删除行首空格 sed -i 's/^ //g' test 4、删除行尾空格 sed -i 's/ $/...

qq_19316267的博客 1万+

Linux sed 命令字符串替换使用方法详解

sed是一种流编辑器,在linux文本处理中非常常用。它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编...

隔壁老瓦的专栏 5180

linux(三剑客之sed) sed字符串替换命令详解

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

nmxiaocui的博客 1万+

Linux:使用sed命令替换文件内容实操及各种报错问题解决

sed 是一种几乎可以应用在所有 UNIX 平台(包括 Linux)上的轻量级流编辑器。sed 有许多很好的特性。首先,它相当小巧,通常要比你所喜爱的脚本语言小多倍。其次,因为 sed 是一种流编辑器,所以,它可以对如管道这样的标准输入中接收的数据进行编辑。因此,无须将要编辑的数据存储在磁盘上的文件中。因为可以轻易将数据管道输出到 sed,所以,将 sed 用作强大的 Shell 脚本中长而复杂的管道很容易。sed 主要是用来将数据进行选取、替换、删除、新増的命令。

鄙人kunzhi96,感恩遇见! 9696
上一篇: date命令的两种常用法
下一篇: bash实现trim字符串
FitzLeopard
博客等级 码龄9年 6粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值