用Bash变量进行sed替换

问题:

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

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

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


回答:

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

#!/usr/bin/env bash

name="John"
echo "Hello $name"

echo "Hello $name" | sed "s/John/Bob/g"
echo "Hello $name" | sed "s/$name/Bob/g"

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

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

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

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

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

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

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

参考:


相关阅读:

相关推荐

  1. Bash变量进行sed替换

    2024-04-22 13:20:02       16 阅读
  2. bash例子-source进程替换、alias不生效处理

    2024-04-22 13:20:02       15 阅读
  3. sed替换文本?一文掌握 sed 更多

    2024-04-22 13:20:02       33 阅读
  4. Linux yum/环境变量/服务/进程/hash/bash/防火墙命令

    2024-04-22 13:20:02       17 阅读
  5. bash 变量作用域

    2024-04-22 13:20:02       33 阅读
  6. windows ubuntu sed,awk,grep篇:2:sed 替换命令

    2024-04-22 13:20:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 13:20:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 13:20:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 13:20:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 13:20:02       20 阅读

热门阅读

  1. 在Bash中如何提取子字符串

    2024-04-22 13:20:02       17 阅读
  2. 负载均衡的原理和算法

    2024-04-22 13:20:02       15 阅读
  3. css3中有哪些伪选择器?

    2024-04-22 13:20:02       17 阅读
  4. PotCSS

    2024-04-22 13:20:02       17 阅读
  5. Hbase 伪分布式安装 - UbuntuServer2204

    2024-04-22 13:20:02       10 阅读
  6. shell 脚本基础练习

    2024-04-22 13:20:02       17 阅读
  7. Saas系统多任务分发排队

    2024-04-22 13:20:02       18 阅读
  8. Windows上构建 Chisel-Bootcamp

    2024-04-22 13:20:02       22 阅读
  9. 低配置的电脑上刷新WPF DataGrid 很卡,如何优化?

    2024-04-22 13:20:02       16 阅读