我想为自己做这件事,但我觉得自己像个白痴。所以我希望有人有一个更聪明的方法来完成看起来非常简单的事情。
file.conf:
USER: !USER!script.sh:
param=$1
# something to replace !USER! with $param运行file.conf后的script.sh squirrel:
USER: squirrel发布于 2022-09-13 02:25:13
您可以使用sed命令来实现这一点。假设在您的file.conf上有:
USER: !USER!
USER: !USER2!
USER: !USER
USER: !USER!在您的script.sh文件中,应该有:
#! /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已经发生了更改。产出如下:
USER: squirrel
USER: !USER2!
USER: !USER
USER: squirrel如您所见,只有第一行和最后一行!USER!已经更改。
警告:
sed -i'.bak'时,请确保-i和.bak之间没有空格。$params变量包含诸如\、/、&等特殊字符,则sed命令将失败,因此必须通过前缀\来转义这些字符。例如,如果要传递值'fuzz&',则应使用'fuzz\&'。script.sh时,请确保使用的是单引号'而不是双引号"。如果您想使用",并且您的字符串包含字符` (回勾符)或\,则必须用前缀\转义这个字符:./script.sh "fuzz\`" # "fuzz\`" will be "fuzz`"
#or
./script.sh "fuzz\\\\" # "fuzz\\\\" will be "fuzz\"多亏了弗雷比乔斯和飞利浦的观察。
https://unix.stackexchange.com/questions/717070
复制相似问题