将字符串转义为 sed 替换模式

2024-04-06

在我的 bash 脚本中,我有一个外部(从用户接收的)字符串,我应该在 sed 模式中使用它。

REPLACE="<funny characters here>"
sed "s/KEYWORD/$REPLACE/g"

我怎样才能逃脱$REPLACE字符串,这样它就会被安全地接受sed作为字面替代?

NOTE: The KEYWORD是一个没有匹配项等的哑子字符串。它不是由用户提供的。


Warning: 这确实not考虑换行符。如需更深入的答案,请参阅这个问题 https://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliably-with-sed反而。 (谢谢,埃德·莫顿 https://stackoverflow.com/a/29626460/4575793和尼克拉斯·彼得)

请注意,逃避一切并不是一个好主意。 sed 需要转义许多字符get他们的特殊意义。例如,如果您转义替换字符串中的数字,它将变成反向引用。

正如 Ben Blank 所说,替换字符串中只有三个字符需要转义(转义本身、用于语句结尾的正斜杠和用于替换全部的 &):

ESCAPED_REPLACE=$(printf '%s\n' "$REPLACE" | sed -e 's/[\/&]/\\&/g')
# Now you can use ESCAPED_REPLACE in the original sed statement
sed "s/KEYWORD/$ESCAPED_REPLACE/g"

如果你需要逃离KEYWORD字符串,以下是您需要的:

sed -e 's/[]\/$*.^[]/\\&/g'

并且可以被以下人员使用:

KEYWORD="The Keyword You Need";
ESCAPED_KEYWORD=$(printf '%s\n' "$KEYWORD" | sed -e 's/[]\/$*.^[]/\\&/g');

# Now you can use it inside the original sed statement to replace text
sed "s/$ESCAPED_KEYWORD/$ESCAPED_REPLACE/g"

请记住,如果您使用的字符不是/作为分隔符,您需要将上面表达式中的斜杠替换为您正在使用的字符。请参阅 Peter Claw 的评论以获取解释。

Edited:由于之前未考虑到一些极端情况,上述命令已更改多次。检查编辑历史记录以了解详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字符串转义为 sed 替换模式 的相关文章

  • 如何使用递归字符串连接构建带有小计的 HTML 表?

    我有接下来的两张表 CREATE TABLE SalesByStore Brand VARCHAR 10 StoreName VARCHAR 50 Sales DECIMAL 10 2 CREATE TABLE SalesByBrand B
  • 如何从Python列表中的字符串中删除双引号?

    我正在尝试在字典列表中获取一些数据 数据来自 csv 文件 因此都是字符串 文件中的键都有双引号 但由于这些都是字符串 我想删除它们 这样它们在字典中看起来像这样 key value 而不是这个 key value 我尝试简单地使用 str
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • PHP 的 mb_internal_encoding 实际上是做什么的?

    根据 PHP 网站 http www php net manual en function mb internal encoding php它这样做 coding 是用于 HTTP 输入的字符编码名称 字符编码转换 HTTP输出字符编码 转
  • Erlang:如何将原子转换为字符串?

    我想从原子转换为字符串 Input hello world Output hello world 我该如何实现这一目标 Use atom to list http erlang org doc man erlang html atom to
  • NHibernate 获取 & 字符串 Id

    我在 NHibernate 上有一个分配了字符串 Id 的实体 并且在通过 Id 获取实体时遇到了一些问题 例子 假设有这样的数据库记录 Id Description AAA MyDescription 现在 如果我使用搜索 ID aaa
  • 使用 Java 将摩尔斯电码转换为英文文本

    我最近有一项任务 将英语转换为摩尔斯电码 并将摩尔斯电码转换为英语 输入莫尔斯电码时 我的老师希望各个字母之间用 1 个空格分隔 单词之间用 分隔 例如 是 成为 我能够完美地将英语转换为莫尔斯电码 但我对莫尔斯电码转换为英语感到不知所措
  • toUpperCase() 方法什么时候创建一个新对象?

    public class Child public static void main String args String x new String ABC String y x toUpperCase System out println
  • 十六进制字符串的运行长度编码(包括换行符)

    我正在使用以下方法实现游程长度编码GZipStreamC winforms 应用程序中的类 数据以一系列由换行符分隔的字符串形式提供 如下所示 FFFFFFFF FFFFFEFF FDFFFFFF 00FFFFFF 在压缩之前 我将字符串转
  • 拆分/标记化/扫描字符串并注意引号

    Java中是否有默认 简单的方法来分割字符串 但要注意引号或其他符号 例如 给定以下文本 There s a man that live next door in my neighborhood and he gets me down Ob
  • VBA 字符串 255 个字符限制

    我在使用 VBA 时遇到问题 并注意到它的字符串限制为 255 个字符 我实际上正在尝试通过 POST 发送 JSON 并暂停执行 我注意到该字符串始终只有 255 个字符 有没有办法调整字符串的大小或其他什么 我在这个问题上浪费了大约 6
  • 如何在Python中按AaB而不是ABa顺序对字符串进行排序

    我正在尝试对字符串进行排序 为 punnetsquare 制作基因型 我目前的实现是 unsorted genotype ABaB sorted genotype sorted list unsorted genotype sorted s
  • 字符串列表,获取n个元素的公共子串,Python

    我的问题可能类似于this https stackoverflow com questions 37514193 count the number of occurrences of n length not given string in
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • 使用字符串中的变量名称访问变量值,R

    Intro 一个数据集有大量的age year变量 age 1990 age 1991 etc 我有一个字符串值数组length age years 表示这些变量 使得age years 1 回报 age 1990 etc Need 我想搜
  • strtok - 如何避免换行并放入字符串数组?

    如果我欺骗了主题 我真的很抱歉 我在这里搜索但没有结果 我有代码 void split char str char splitstr char p char splitbuf 32 int i 0 p strtok str while p
  • Golang中按长度分割字符串

    有谁知道如何在 Golang 中按长度分割字符串 例如 每 3 个字符分割 helloworld 那么理想情况下它应该返回一个 hel low orl d 数组 或者 一个可能的解决方案是在每 3 个字符后附加一个换行符 所有的想法都非常感
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • 将 time.Time 转换为字符串

    我正在尝试将数据库中的一些值添加到 string在围棋中 其中一些是时间戳 我收到错误 无法在数组元素中使用 U Created date 类型 time Time 作为类型字符串 我可以转换吗time Time to string typ
  • PLSql 返回值

    我再次使用一些 PLSql 我想知道 是否有任何方法可以像选择一样使用以下函数 而不必将其转换为函数或过程 这样我就可以从包含它的脚本中看到代码 代码如下 DECLARE outpt VARCHAR2 1000 flow rI VARCHA

随机推荐

  • C# 无法从应用程序成功启动中打开串行端口

    因此 我正在打开这个端口并将端口名称保存在我的应用程序设置中 当我加载表单时 它尝试打开端口 但失败了 仅在单击我的 开放端口 按钮后EXACT端口打开时使用相同的代码 然后 如果我单击 关闭端口 按钮并重新打开表单 它就可以工作了 它会自
  • System.Windows.Forms.HtmlDocument 不包含 GetElementByID 的定义

    您能解释一下为什么我会收到此错误吗 private void startButton Click object sender EventArgs e HtmlElement mainNav webBrowser1 Document GetE
  • Perl 中的列表运算符优先级

    我正在读 Beginning Perl 一书 它给出了以下两条语句 print Test one 6 gt 3 3 gt 4 n print Test two 6 gt 3 and 3 gt 4 n 第一行不打印任何内容并换行 第二行打印
  • 创建向量空间

    我有一个问题 我有很多文档 每一行都是由某种模式构建的 当然 我有这一系列的图案 我想创建一些向量空间 然后通过某种规则来向量这个模式 我还不知道这个规则是什么 即使这个模式像我的向量空间的 质心 然后向量当前文档的每一行 再次按照此规则
  • 如何在 .NET Core 应用程序 Docker 映像中包含依赖项?

    我正在尝试构建 NET Core 应用程序 Docker 映像 但我不知道如何将项目的 NuGet 依赖项获取到图像中 为简单起见 我创建了一个 NET Core 控制台应用程序 using System using Newtonsoft
  • 使用 C# 生成随机数

    我正在考虑生成 1 到 500 万之间的随机数 这个过程不必很快 尽管如果快的话就好了 但它必须尽可能随机 我知道没有什么是随机的 我有多种种子数据源 我不确定是否 NET http en wikipedia org wiki NET Fr
  • 在 Javascript 中将变量名转换为字符串?

    我在 Stack Overflow 上看到过一些关于此问题的其他帖子 但答案似乎总是创建一个带有键 值对的对象 这似乎不是我目前的情况所需要的 我想要做什么 我有不同的数组 其中可能包含用户名 我想检查每个数组 看看用户名是否作为其中的值存
  • 哪些错误适用于不同的 FindBugs 报告级别?

    根据 Ant 任务 报告级别是低 中 高设置 用于查找不同严重程度级别的错误 然而 我找不到任何东西可以解释哪些错误适用于这些不同的报告级别 是否有某个地方可以提供此功能 即使我需要在源代码中查看它 不幸的是 错误类型和优先级之间的关联存在
  • SwiftUI UIViewRepresentable UITextView 绑定

    目前 SwiftUI 本身不支持多行文本输入 希望很快就会添加此功能 所以我一直在尝试使用组合框架来实现 UIKit 中的 UITextView 它支持多行输入 但是我得到的结果好坏参半 这是我创建的用于制作文本视图的代码 struct M
  • 使用默认值初始化方法的参数

    如果未将显式值传递到方法中 我想用一些默认值初始化方法的参数 如下所示 class Example def init self data self default data self data data def default data r
  • Safari 上使用 React 的日期选择器

    我的应用程序使用 Form Input 来自语义 UI 反应 https react semantic ui com collections form 库插入日期 它在 Chrome 和 Firefox 上显示日期选择器 但在 Safari
  • 在 django-oscar 中集成包含重定向的付款方式

    我正在使用 django oscar 框架开发一个购物网站 实际上我正在使用他们的沙箱网站 我想在结帐流程中添加付款功能 但问题是 我完全困惑了 我已阅读此链接 奥斯卡的支付集成文档 http django oscar readthedoc
  • 如何摆脱 Eclipse 查找/替换栏

    For searching a document I like using the floating Find Replace window that pops up Lately however hitting command F pul
  • 使用 Phonegap 启动图像后白屏闪烁

    加载启动图像后 在加载应用程序之前我会看到一个白屏 我正在将phonegap 与xcode 结合使用 我希望我的应用程序加载到我的启动图像上 以便它遵循 ios 开发人员指南并提供流畅的启动体验 我认为这个白屏是我的应用程序加载的网络视图
  • 从具体类派生抽象类

    假设我们有一个具体的class Apple Apple 对象可以被实例化 现在 有人来导出一个摘要class Peach来自苹果 它是抽象的 因为它引入了新的纯虚函数 Peach 的用户现在被迫从它派生并定义这个新函数 这是常见的模式吗 这
  • 将模型引用添加到现有 Rails 模型

    我想知道在两个之间添加关系的 正确 方法existingRails 3 中的类 给定现有模型 小丑和兔子 我想添加从兔子到小丑的引用 belongs to 我首先尝试生成迁移 rails g migration AddClownToRabb
  • SwitchPreferenceCompat:android:switchTextOff / switchTextOn 不起作用

    我正在尝试显示一个 switchPreference 它允许用户根据英里或公里显示距离 我正在使用 SwitchPreferenceCompat 支持库 根据该库 我可以使用 textSwitchOff 和 textSwitchOn 将文本
  • 如何使用 SwiftUI 获得动态视图列表

    我可以做一个静态列表 比如 List View1 View2 但是如何从数组中创建元素的动态列表呢 我尝试了以下但出现错误 包含控制流语句的闭包不能与函数生成器 ViewBuilder 一起使用 let elements Any View1
  • @WebMvcTest 由于缺少依赖项而未运行

    我想使用以下方法测试我的控制器 WebMvcTest I MockBean控制器的依赖项 但运行测试时 无法启动 运行主类时应用程序正确启动 考试 RunWith SpringRunner class WebMvcTest MetricRe
  • 将字符串转义为 sed 替换模式

    在我的 bash 脚本中 我有一个外部 从用户接收的 字符串 我应该在 sed 模式中使用它 REPLACE