我有一个看起来像这样的文件:
...
%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
答案 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是否需要引号,非常确定它们不是)