首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用$placeholder参数替换各种配置文件中的$placeholder文本

用$placeholder参数替换各种配置文件中的$placeholder文本
EN

Unix & Linux用户
提问于 2022-09-12 23:18:03
回答 1查看 1.2K关注 0票数 0

我想为自己做这件事,但我觉得自己像个白痴。所以我希望有人有一个更聪明的方法来完成看起来非常简单的事情。

file.conf:

代码语言:javascript
复制
USER: !USER!

script.sh:

代码语言:javascript
复制
param=$1
# something to replace !USER! with $param

运行file.conf后的script.sh squirrel

代码语言:javascript
复制
USER: squirrel
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-09-13 02:25:13

您可以使用sed命令来实现这一点。假设在您的file.conf上有:

代码语言:javascript
复制
USER: !USER!
USER: !USER2!
USER: !USER
USER: !USER!

在您的script.sh文件中,应该有:

代码语言:javascript
复制
#! /bin/bash

param=$1

sed -i'.bak' "s/\!USER\!/$param/" /path/to/file.conf

使用-i参数,sed命令将编辑文件就位。.bak是文件的备份,所以如果您的文件是file.conf,那么它的备份将是file.conf.bak

"s/\!USER\!/$param/"用于替换另一个值。例如,\!USER\!/$param意味着sed将为$param替换字符串!USER! (其中$param包含您在命令行中指定的字符串)。

最后,如果您使用script.sh运行./script.sh squirrel,您将看到file.conf已经发生了更改。产出如下:

代码语言:javascript
复制
USER: squirrel
USER: !USER2!
USER: !USER
USER: squirrel

如您所见,只有第一行和最后一行!USER!已经更改。

警告:

  1. 当您使用sed -i'.bak'时,请确保-i.bak之间没有空格。
  2. 如果$params变量包含诸如\/&等特殊字符,则sed命令将失败,因此必须通过前缀\来转义这些字符。例如,如果要传递值'fuzz&',则应使用'fuzz\&'
  3. 当您将字符串传递给script.sh时,请确保使用的是单引号'而不是双引号"。如果您想使用",并且您的字符串包含字符` (回勾符)或\,则必须用前缀\转义这个字符:
代码语言:javascript
复制
./script.sh "fuzz\`" # "fuzz\`" will be "fuzz`"
#or
./script.sh "fuzz\\\\" # "fuzz\\\\" will be "fuzz\"

多亏了弗雷比乔斯和飞利浦的观察。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/717070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档