除非存在,否则在文件部分添加一行

时间:2012-02-02 16:03:17

标签: linux bash patch

我有一个看起来像这样的文件:

...
%ldirs
(list of line-separated directories)
...

使用shell脚本,我需要在该文件的列表中添加一个目录,但前提是该目录不在列表中。这是捕获:有问题的目录必须来自变量$ SOME_PATH。

我考虑过使用补丁实用程序,但要做到这一点,我必须动态生成补丁文件以添加“+ $ SOME_PATH”。另一个问题是我不知道“后上下文”或“%ldirs”的行号,因此生成补丁文件是有问题的。

还有其他选择吗?

调整回答 - 感谢Rob:

line=$(grep "$SOME_PATH" /path/to/file)
if [ $? -eq 1 ]
    then
    sed -i "/%ldirs/ a\\$SOME_PATH" /path/to/file
fi

最终答案 - 感谢tripleee:

fgrep -xq "$SOME_PATH" /path/to/file || sed -i "/%ldirs/ a\\$SOME_PATH" /path/to/file

1 个答案:

答案 0 :(得分:2)

line=$(grep "$SOME_PATH" %ldirs)
if [ $? -eq 1 ]
    then
    echo "$SOME_PATH" >> %ldirs
fi

这样的东西应该有用,它对我来说很好。我确信还有其他方法可以写它。

line=$(grep "$SOME_PATH" /path/to/file)
if [ $? -eq 1 ]
    then
    sed -i 's/%lsdir/%lsdir\n"$SOME_PATH"/' /path/to/file
fi

应该有效。它会找到%lsdir并将其替换为%lsdir(换行符)$ SOME_PATH(不确定$ SOME_PATH是否需要引号,非常确定它们不是)