如何捕获文件中的特定字符串

时间:2014-01-07 17:40:23

标签: bash grep glob

我想从一组文件中找到字符串Execution has sterted的出现,
说目录/home/abc/output/中存在的三个文件。

为此,我目前正在使用以下命令:

grep "Execution has sterted" /home/abc/output/*

输出:

/home/abc/output/file1:line containing "Execution has sterted"

/home/abc/output/file1~:line containing "Execution has sterted"

/home/abc/output/file2:line containing "Execution has sterted"

/home/abc/output/file2~:line containing "Execution has sterted

/home/abc/output/file3:line containing "Execution has sterted"

/home/abc/output/file3~:line containing "Execution has sterted"

即使有3个文件,输出也包含6行,原始路径和其他路径以~结尾,如上所示。

我希望它显示原始路径的出现,而不是~出现的路径。
怎么做到这一点?

全部谢谢,

它对我有用。

我的实际查询是,通过皇冠工作特定工作将运行并且genrate将说3个日志文件。每个日志文件将包含我需要捕获的语句2个语句说grep“执行已经执行”和“执行完成成功”。 一旦我获得了两个陈述,那么只有我能够顺利完成工作。(因为某些时间工作被困在某一点)

如何通过脚本完成此操作? 我应该在工作完成或工作失败时得到消息

3 个答案:

答案 0 :(得分:3)

文件编辑者在保存文件时,以~结尾的文件通常是备份
最简单的解决方案是通过执行rm /home/abc/output/*~ 首先删除它们


如果你想保留它们,你可以将--exclude=选项传递给grep。
这将使它排除与给定的glob模式匹配的文件。

例如,在您的情况下:

grep --exclude="*~" "Execution has sterted" /home/abc/output/*

将排除匹配*~的文件 (不要忘记将模式括在引号中,以便它直接传递给grep)

答案 1 :(得分:2)

grep --exclude="*~" "search string" /path/*

答案 2 :(得分:1)

要防止grep首先看到备份文件(不再需要--exclude),请使用省略它们的模式。

grep "Execution has sterted" /home/abc/output/*[!~]

*[^~]也应该有效; POSIX(由于我不知道的原因)将正则表达式中使用的^替换为否定字符,但bash支持两者。