linux - Shell脚本用一个值替换所有出现的字符串
问题描述
我是 shell 脚本的新手。我有一个由 placeholder 组成的 YAML 文件。我需要<test-name>
用值 sweta替换所有出现的占位符
脚本.sh
Name="sweta"
下面是 YAML 文件的示例
metadata:
name: <test-name>-svc
namespace: abc
spec:
selector:
app: <test-name>
ports:
- protocol: TCP
name: http
port: 80
targetPort: 8080
我的预期输出是:
metadata:
name: sweta-svc
namespace: abc
spec:
selector:
app: sweta
ports:
- protocol: TCP
name: http
port: 80
targetPort: 8080
有人能帮我吗?
感谢您的所有帮助。提前致谢!
解决方案
有两种简单的方法可以完成搜索并将<test-name>
字符串替换为sweta
注意: 假设您的 yaml 文件名为config.yaml
选项 1:使用流编辑器命令“sed”,如下所示:
覆盖原始文件
sed -i 's/<test-name>/sweta/g' config.yaml
将输出写入不同的文件
sed 's/<test-name>/sweta/g' config.yaml > updated_config.yaml
sed 命令的语法是sed -i 's/original/new/g' file.txt
sed
命令名称在哪里
-i
代表就地编辑。此选项用于覆盖原始文件。如果您不使用它,则必须将输出重定向到另一个文件,如上面第二个命令中所做的那样。
s
代表替代品
original
是搜索字符串
new
是替换字符串
g
用于全局(替换所有出现)。省略它只会替换第一次出现
file.txt
是文本文件(Linux 不使用 .txt 之类的扩展名,但人们通常使用此类扩展名命名文件作为表示文件类型的约定)
选项 2:使用“awk”命令:
awk 是一个非常强大的文本处理命令,具有自己的语言语法,但是这种搜索和替换非常简单:
awk '{gsub("<test-name>", "sweta"); print $0}' config.yaml > updated_config.yaml
推荐阅读
- php - 换行符在我的 php 程序中不起作用?
- c - Fwrite()结构数组以在c中归档
- c++ - 无法在 SDL 2 中创建流畅的动画
- java - 使用多线程设置 Java 对象的两个或多个变量
- python - Azure Python App Function 不再在本地运行 - 模块“azure.functions_worker”没有属性“start_async”
- javascript - 如何访问 JSON 文档中的子元素
- python-3.x - Selenium - execute_async_script 中未提供回调
- excel - 根据单元格值更改 ActiveX 控件文本框颜色
- ruby-on-rails - 无法设置 rails 数据库
- ios - InputAccessoryView 正在浏览导航栏