在Bash中,搜索文件中的字符串,如果不存在则附加带字符串的文件

时间:2017-01-13 19:25:47

标签: bash awk grep

我需要找到一种更好的方法来处理这种情况。这就是我正在做的,以及我想做的事情:

我从一整天循环的程序中获取数据。我想添加所有新数据以附加文件(file1)。 循环中的程序每天发送重复数据1000次或更多次。我只想添加我的file1中已不存在的行。 而不是为file1写入数据,使用awk修剪重复项,写入file2,删除file1,将file2复制到files1的路径,并删除file2,我想知道是否有一种只保留一个文件的方法吗?我正在使用SD内存,我觉得几天之后我会烧掉我的SD卡生活。我需要使用RAM或其他一些可以读取文件文本,编辑文件并将其保存回自身的命令。 这是完成工作的代码,但我觉得我的SD卡很难:

echo $datafromprogram >> file1
awk '!seen[$0]++' file1 >> file2
rm file1
cp file2 file1
rm file2

我还尝试使用一些逻辑来检查file1,如果$ datafromprogram已经存在,但由于某些原因,当我执行示例代码时这是有效的,但当我用echo not found替换echo $datafromprogram >> file1时,每个时间我运行代码总是使用" else",即使字符串完全匹配。

示例代码:

if grep -q PATTERN file.txt; then
    echo found
else
    echo not found
fi

我的代码:

if grep -Fxq $datafromprogram file1; then
echo "String already exists"
else
echo $datafromprogram >> file1
fi

1 个答案:

答案 0 :(得分:0)

我发现这个解决方案最符合我的要求。

grep -E "$datafromprogram" file1 || echo "$datafromprogram" >> file1

所有这一切都是使用grep来检查file1的字符串。双管道将返回真或假。如果返回false,则为file1添加字符串。

抱歉,但我忘记了我发现这个想法的地方。如果我以后可以在家中找到我历史记录中的链接,我会将其添加到此答案中。