【发布时间】:2019-10-18 01:27:19
【问题描述】:
我在一个文件中有一些文本,我想使用 shell 脚本将这些文本复制到另一个文件中。
这是脚本-
#!/bin/sh
PROPERTY_FILE=/path/keyValuePairs.properties
function getValue {
FIELD_KEY=$1
FIELD_VALUE=`cat $PROPERTY_FILE | grep "$FIELD_KEY" | cut --complement -d'=' -f1`
}
SERVER_FILE=/path/FileToReplace.yaml
getValue "xyz.abc"
sed -i -e "s|PASSWORD|$FIELD_VALUE|g" $SERVER_FILE
keyValuePairs.properties:
xyz.abc=abs
FileToReplace.yaml:
someField:
address: "someValue"
password: PASSWORD
脚本的目标是从 keyValuePairs.properties 中获取“abs”,并将其替换为 FileToReplace.yaml 中的 PASSWORD 字段。 FileToReplace.yaml 应该看起来像
someField:
address: "someValue"
password: abs
注意 - 文本中可能有“=”而不是“abs”。它也应该可以正常工作。
目前的情况是,当我运行脚本时,它会将 FileToReplace.yaml 更新为
someField:
address: "someValue"
password:
将值设置为空。
谁能帮我弄清楚这个脚本有什么问题?
注意 - 每当我执行脚本时,我都会遇到问题 -
sh scriptToRun.sh
cut: illegal option -- -
usage: cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-s] [-d delim] [file ...]
如果我使用 gcut,代码可以正常工作,但我不能使用 gcut(需求问题)。我需要使用 cut 来解决这个问题。
【问题讨论】:
-
应该
$PROP_KEY是$FIELD_KEY? -
没错。谢谢指出!
-
但是,同样的问题仍然存在。我编辑了这篇文章的文字。
-
尝试将 cut 更改为
cut -d'=' -f2或在 bash 而不是 sh 中运行,除非这是必需的 -
cat $PROPERTY_FILE | grep "$FIELD_KEY"这行可以直接改写为grep "$FIELD_KEY" $PROPERTY_FILE,避免Useless use of cat。