用Bash变量进行sed替换

news/2024/9/23 20:21:01/

问题:

我试图在一个 Bash 脚本中使用 sed 改变文本文件中的值:

bash">sed 's/draw($old_num;n_)/draw($new_num;n_)/g' file.txt > tmp

这行代码将在 for 循环中。为什么它不起作用?


回答:

当使用 Bash 变量进行 sed 替换时,重要的是要使用双引号而不是单引号。单引号内的变量不会在 Bash 中被替换。
以下是如何使用 Bash 变量进行 sed 替换的代码示例:

bash">#!/usr/bin/env bashname="John"
echo "Hello $name"echo "Hello $name" | sed "s/John/Bob/g"
echo "Hello $name" | sed "s/$name/Bob/g"

如果你必须要使用单引号,可以将字符串与双引号中的变量连接起来。这将限制相关部分的扩展,并防止感叹号!、反引号等的意外扩展。

那么,上述示例代码最后一行可以写为:

bash">echo "Hello $name" | sed 's/'"$name"'/Bob/g'

问题中的代码可以改写为:

bash">sed 's/draw('"$old_num"';n_)/draw('"$new_num"';n_)/g' file.txt > tmp

另外,除非你需要保留原文件的内容,否则你可以使用 -i 标志就地更改文件:

bash">sed -i "s/draw($old_num;n_)/draw($new_num;n_)/g" file.txt

参考:

  • stackoverflow question 7680504
  • man sed
  • Bash中单引号和双引号的区别

相关阅读:

  • sh和Bash的区别
  • 2>&1是什么意思
  • 为什么我不能在脚本中使用“cd“来更改目录
  • 为什么在可执行文件或脚本名称之前需要./(点-斜杠),以便在bash中运行它
  • 如何使用bash脚本并行运行多个程序
  • 为什么要使用xargs命令
  • 一文掌握全网最全文件操作命令!120+命令

http://www.ppmy.cn/news/1429229.html

相关文章

【数据结构】冒泡排序

冒泡排序是一种简单的排序算法。 它基于重复地交换相邻元素的位置。算法的每一步都会比较相邻的两个元素,如果它们的顺序错误(即第一个元素比第二个元素大),则交换它们。这样,每经过一轮比较和交换,数组中…

20240417金融读报:金融支持制造通知外汇局修订资本项目指引碳足迹现状与痛点

1、《关于深化制造业金融服务 助力推进新型工业化的通知》强化制造业中长期贷款和信用贷款支持,重点服务基础/创新行业,支持设备以旧换新(更绿色、更智能) 2、国家外汇局修订资本项目外汇业务指引,2024版5月6日起执行&…

【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测(Matlab实现)

【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测(Matlab实现) 目录 【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测(Matlab实现)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 差异创意搜索算法&…

dns可能不可用什么原因?

DNS(Domain Name System)可能不可用的原因有多种,包括: DNS服务器故障:DNS服务器可能发生故障,导致无法提供域名解析服务。这可能是由于硬件故障、软件错误、配置问题或网络问题引起的。 网络故障&#xf…

ASP.NET基于Web Mail收发系统设计与开发

摘 要 互联网络技术的不断发展,电子邮件服务已经成为人们基本的信息交互手段,也是网络服务中最早和最基本的服务之一。传统邮件系统大多是基于C/S结构,如Lotus notes、Microsoft Exchange Server等,这些邮件系统占用相对较多的服…

python实现视频剪辑

即刻关注,获取更多 实现目标 因上传某盘等文件大小限制,无法上传视频,故需要对视频进行压缩 参考资料 ffmpeg文档参考: https://ffmpeg.org/ffmpeg.html 依赖条件 已经安装好python3.11 ,原则上更高版本也可以 安装 ffmpeg 依赖 p…

总分420+专业140+哈工大哈尔滨工业大学803信号与系统和数字逻辑电路考研电子信息与通信工程,真题,大纲,参考书。

考研复习一路走来,成绩还是令人满意,专业803信号和数电140,总分420,顺利上岸,总结一下自己这一年复习经历,希望大家可以所有参考,这一年复习跌跌拌拌,有时面对压力也会焦虑&#xff…

ConcurrentHashMap 源码分析(一)

一、简述 本文对 ConcurrentHashMap#put() 源码进行分析。 二、源码概览 public V put(K key, V value) {return putVal(key, value, false); }上面是 ConcurrentHashMap#put() 的源码,我们可以看出其核心逻辑在 putVal() 方法中。 final V putVal(K key, V val…