如何在 sed 命令中使用变量

2024-04-21

我有一个名为“text_file1.txt”的文件,文件中的内容是 “主题= /C=US/O=AAA/OU=QA/OU=12345/OU=TESTAPP/”

现在我想要实现的是如下内容: “主题= /C=US/O=AAA/$$$QA/###12345/@@@TESTAPP/”

当我执行下面的代码时:

#! /bin/ksh
OU1="QA"
OU2=12345
OU3="TESTAPP"
`sed -i "s/OU=$OU1/$$$\${OU1}/g" text_file1.txt`
`sed -i "s/OU=$OU2/###\${OU2}/g" text_file1.txt`
`sed -i "s/OU=$OU3/@@@\${OU3}/g" text_file1.txt`
content=`cat text_file1.txt`
echo "content:$content"

我得到这样的输出:

content:subject= /C=US/O=Wells Fargo/2865528655{OU1}/###12345/@@@TESTAPP/CN=03032015_CUST_2131_Unix_CLBLABB34C02.wellsfargo.com

只有这个命令“sed -i "s/OU=$OU1/$$$\${OU1}/g" text_file1.txt“没有按预期工作。任何人都可以对此提出一些想法吗?

提前致谢。


有两件事在其中发挥着作用:

  1. 你必须逃脱$(即使用\$) 在双引号 shell 字符串中,如果你想要一个文字$, and
  2. \当它出现在 a 之前时,不保留其字面意义$内部反引号(也就是说,内部反引号,\$变得只是$).

当你写的时候

`sed -i "s/OU=$OU1/$$$\${OU1}/g" text_file1.txt`

因为该命令是用反引号括起来的,所以您可以使用该命令生成一个子 shell

sed -i "s/OU=$OU1/$$$${OU1}/g" text_file1.txt

Since $$$$在双引号字符串内,发生变量扩展,并且它被扩展为两次出现$$(正在执行扩展的 shell 的进程 ID)。这意味着代码sed最终看到的是

s/OU=QA/1234512345{OU1}/g

...如果生成的子 shell 的进程 ID 是12345.

在这种特殊情况下,您不需要命令替换(反引号),因此您可以编写

sed -i "s/OU=$OU1/\$\$\$${OU1}/g" text_file1.txt

然而,在 sed 代码中使用 shell 变量始终是一个问题。如果你愿意的话,考虑一下如果OU1有价值/; e rm -Rf * #(提示:GNU sed 有一个e运行 shell 命令的指令)。出于这个原因,我总是更喜欢awk进行涉及 shell 变量的替换:

cp text_file1.txt text_file1.txt~
awk -v OU1="$OU1" '{ gsub("OU=" OU1, "$$$" OU1) } 1' text_file1.txt~ > text_file1.txt

这通过不处理来避免代码注入问题OU1作为代码。

如果您有 GNU awk 4.1 或更高版本,

awk -v OU1="$OU1" -i inplace  '{ gsub("OU=" OU1, "$$$" OU1) } 1' text_file1.txt

可以在没有(可见的)临时文件的情况下完成整个事情。

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

如何在 sed 命令中使用变量 的相关文章

随机推荐

  • 诊断 SQL Server 2005 中的死锁

    我们在 Stack Overflow SQL Server 2005 数据库中发现了一些有害但罕见的死锁情况 我附加了分析器 使用设置了跟踪配置文件这篇关于解决死锁问题的优秀文章 http www simple talk com sql l
  • 如何仅将缩进序列化应用于某些属性?

    我想以人类可读的方式将 NET 对象序列化为 JSON 但我希望对对象的属性或数组的元素是否最终位于自己的一行上有更多的控制 目前我正在使用 JSON NETJsonConvert SerializeObject object Format
  • 如何改变字典中的数组?

    我在操场上尝试过以下操作 var d1 String String d1 a String var a1 d1 a a1 append s1 println d1 输出是 a 我希望 a s1 改变字典中数组的正确方法是什么 在 swift
  • C++:不同翻译单元中具有相同名称的不同类

    考虑以下示例 usedclass1 hpp include
  • pmap 和线程数

    user gt Runtime getRuntime availableProcessors 2 并评估这个例子 http clojuredocs org clojure core clojure core pmap example 684
  • “PKIX 路径构建失败”和“无法找到请求目标的有效证书路径”

    我正在尝试使用 twitter4j 库为我的 java 项目获取推文 该项目在幕后使用java net HttpURLConnection 如堆栈跟踪中所示 第一次运行时 我收到有关证书的错误sun security validator V
  • PyQt:QFileSystemModel 复选框过滤器

    我正在尝试使用 python pyqt 创建一个实用程序来从QFileSystemModel 仅包括已检查的项目 现在我想要控制QFileSystemModel使用文件名 文件类型 文件大小进行过滤的复选框 我如何勾选 取消勾选QFileS
  • MediatR 和 SimpleInjector 的依赖范围问题

    我一直在使用中介者模式和 CQRS 进行实验MediatR https github com jbogard MediatR使用实体框架进行数据访问的 WinForms 应用程序中的库 该应用程序用于批次制造工厂 允许用户查看活动批次和已完
  • 有没有办法在没有样式组件的情况下为整个反应应用程序设置默认字体系列?

    我正在寻找一种方法来设置整个反应应用程序的默认字体系列 但所有结果 包都指向反应本机 对于React 有没有一种方法可以默认全局字体设置 而无需在每个CSS中指定font family 谢谢 如果我正确理解你的问题 应该这样做 import
  • C代码运行速度更快吗?

    从 Objective C 调用 C 代码是否有任何性能提升 我在某处读到 与使用函数调用的其他语言相比 消息传递速度较慢 那么 如果我从 Objective C 代码调用 C 函数 我是否可以避免消息传递开销 在优化性能时 是否建议使用
  • 如何在 Ubuntu 20.04 中安装 Python2.7 的 pip

    有什么方法可以为 Python2 7 安装 pip 吗 我可以通过安装 python2 7 sudo apt install python2 minimal 我尝试为此安装 pip sudo apt install python pip p
  • 为什么我的 JQuery .ajax 请求没有并行发出?

    我正在尝试使用 jQuery 并行发出两个 ajax 请求 如下所示 var sources source1 source2 sources each function var source this ajax async true typ
  • 是否可以使用 np 数组作为 h5py 数据集中的索引?

    我需要将多个数据集 每个数据集包含在一个单独的文件中 合并到属于最终文件的另一个数据集中 当部分数据集中的数据被复制到最终数据集中时 它们的顺序不会保留 部分数据集中的数据通过索引 映射 到最终数据集中 我创建了两个列表 final ind
  • 如何检测我的任何活动是否位于最前面并且对用户可见?

    我想在我的任何活动可见时启动一个意图 否则我会将其作为通知发布 并将由用户触发 为了决定这一点 我需要知道我的任何活动是否是最重要的 我该怎么做 我不知道有一种方法可以获取当前显示的活动 但是您可以结合使用活动生命周期 http devel
  • 使用迭代器从“查找”或“删除”中删除

    我想知道在 C 中从向量中删除元素的最佳实践是什么 我多次看到人们使用 std remove 查找并删除元素 然后使用擦除从向量中删除元素 但为什么它比使用 find 获取要删除的元素的迭代器然后使用该迭代器的擦除更好呢 Thanks st
  • Android核心库错误

    当我包含 jaxp jar 时 出现以下错误 trouble processing javax xml XMLConstants class 2009 05 08 16 53 18 TestProject Attempt to includ
  • bash:找不到 nodemon 命令 Windows 10

    I spent a lot of time looking for a solution but didn t find anything with my case So I checked global packages npm list
  • 我想检查android中的声音响度

    我正在开发一个应用程序 我必须检测语音的响度 意味着手机上有一些喊叫 它会在屏幕上显示响度级别 哪个 API 可以用于此目的 Look at http developer android com reference android medi
  • Android 流量统计数据报告的内容比我下载的内容还要多

    您好 我正在运行一个简单的下载测试 看看我的连接速度有多快 我记录了trafficStats rx值 然后下载了一个5MB的文件 记录了rx值 然后计算了差异 我知道这个文件正好是 5MB 这是代码 URL url new URL urlS
  • 如何在 sed 命令中使用变量

    我有一个名为 text file1 txt 的文件 文件中的内容是 主题 C US O AAA OU QA OU 12345 OU TESTAPP 现在我想要实现的是如下内容 主题 C US O AAA QA 12345 TESTAPP 当