![从包含字符串但不包含同一行中的另一个字符串的文件中提取行](https://linux22.com/image/151128/%E4%BB%8E%E5%8C%85%E5%90%AB%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BD%86%E4%B8%8D%E5%8C%85%E5%90%AB%E5%90%8C%E4%B8%80%E8%A1%8C%E4%B8%AD%E7%9A%84%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8F%90%E5%8F%96%E8%A1%8C.png)
我在脚本中使用 grep 来获取包含特定字符串的文件的文件名列表。基本指令是 do 循环中的这条指令:
if grep -q "$str" Inputs/inp$n; then
echo inp$n >> file_list.txt
fi
像这样获取线路本身以进行验证:
grep "$str" Files/inp$n >> lines.txt
我想做的是防止在查找某些字符串时输出中出现一些误报。我想获取包含“abc#”的行,其中“#”是一个数字(可能是多个数字),但我不希望在搜索字符串“abc”时出现特定单词“abcde”。请注意,“abc#”和“abcde”不出现在这些文件的同一行中。
有没有办法告诉 grep 忽略包含“abc”的行中包含“abcde”的行?
答案1
$ grep -l 'abc[0-9]' Inputs/inp*
开关-l
将列出匹配的文件。提供一组文件进行搜索而不是迭代可能比迭代 shellfor
循环更快。