检查文本是否在文件中

时间:2015-03-03 18:32:54

标签: bash

我的脚本应检查文件中是否包含特殊字,否则应将其添加到文件中

我的档案: 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

中,则不应添加

2 个答案:

答案 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