我的脚本应检查文件中是否包含特殊字,否则应将其添加到文件中
我的档案: info.txt
info "text1"
现在我的脚本有这些信息:
INFO1=$(cat info.txt | grep "info" | head -1 | awk -F "info " '{print $2}' | sed 's/["]//g')
INFO2="info2"
grep info info.txt &>/dev/null
if [[ $? -eq 0 ]]; then
sed -i -e "s/^\(info \).*$/\1\"${INFO1}${INFO2}\"/" info.txt
fi
现在我运行这个脚本,然后info.txt将显示我:
info "info1 info2"
当我再次运行脚本时,它会得到:
info "info1 info2 info2"
我怎么能意识到脚本只在不存在时才将info2添加到info.txt?如果info2在info.txt
中,则不应添加答案 0 :(得分:1)
看看你的逻辑:
grep info info.txt &>/dev/null
if [[ $? -eq 0 ]]; then
sed -i -e "s/^\(info \).*$/\1\"${INFO1}${INFO2}\"/" info.txt
fi
仅当 info2
已存在时,才会追加info
。 info
始终已经存在。因此,它总是附加info2
。
让你的grep寻找info2
,而不是info
。
有关改进代码的说明,请参阅有关问题的评论。通过http://shellcheck.net/运行它也是一个好主意。
答案 1 :(得分:0)
这会将$MAGIC_WORD
添加到$FILE
,如果不存在的话:
FILE=info.txt
MAGIC_WORD=info2
if ! grep -q -e "$MAGIC_WORD" "$FILE" # if the magic word is not in the file
then
# add the magic word:
sed -i -e "s/\"\$/ ${MAGIC_WORD}\"/g" "$FILE"
fi