Linux 使用placehodler更新文件内容
我有以下yaml文件,在其中我想用我已经定义的shell变量替换Linux 使用placehodler更新文件内容,linux,shell,sed,makefile,Linux,Shell,Sed,Makefile,我有以下yaml文件,在其中我想用我已经定义的shell变量替换%IMG\u NAME%,例如$IMG\u NAME 这是输入文件 apiVersion: apps/v1 kind: Deployment metadata: name: app spec: replicas: 1 app: app template: metadata: labels: app: app spec: containers:
%IMG\u NAME%
,例如$IMG\u NAME
这是输入文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 1
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: %IMG_NAME%. //this the value to update
imagePullPolicy: Always
ports:
- containerPort: 5000
resources:
limits:
memory: 50Mi
requests:
memory: 25Mi
我试着做以下不起作用的事情,你知道吗
sed -e ’s,myimage,’$IMG_NAME',g' < deployment.yaml
sed-e's,myimage,'$IMG_NAME',g'
我不知道你为什么在你的计划中写更新dep:
。那是什么
不管怎样,也许你只是想这样做:
sed 's/%IMG_NAME%/'"$IMG_NAME"'/g' deployment.yaml
在哪里
- 重复引用
只是一个好习惯$IMG_NAME
不是必需的-e
- 正如评论中指出的那样,使用
代替,
也是不必要的/
sed
,了解以下内容非常重要:
- 符号
是一个单引号,而不是您在问题中使用的正确单引号(“
)”
- 如果您有一个实际的
要传递给unix文件
(例如程序
、sed
,以及许多其他文件),您不需要像这样传递它,awk
,因为这些程序中有许多都接受文件名作为命令行参数,所以您可以执行program
。执行此操作时,程序文件
会知道文件名(当您执行程序
时,它不会知道),并且它也会首先知道它是一个文件(在程序
之后,我不明白您想要什么。
将sed
部署打印到
到标准输出中。yaml
标准输出中,并且不做任何其他操作。
不会出现在我的图像
因此不会更改任何内容(是否要替换部署中。yaml
?)@uzsolt-是的,我想用%IMG\u NAME%
value@RaynD,您是否真的试图使用正确的单引号(myimage
)而不是单引号(”
)?使用逗号(,)而不是斜杠(/)有什么特殊原因吗在替换中?@CRM没有,但是OP似乎喜欢它。但是,是的,也许因为我指定了”
是不必要的,我也可以添加这个。谢谢,这是有效的。关于如何建议用新值替换/覆盖文件的问题?如果你真的想这样做,你可以使用-e
的sed
选项,或者-I
创建一个文件名后附加有-I.bkp
的备份文件。但在确定该命令是否有效之前,不应执行此操作。我尝试了此操作,但出现了错误:.bkp
sed-I's/%IMG_NAME%/'“MG_NAME2”/g'