linux - 使用 grep 检查文本文件中的 2 个精确字符串

标签 linux shell grep

我对 shell 脚本完全陌生,我一直在阅读有关如何使用不同 grep 函数的教程。不幸的是,大多数教程通常讨论从文本文件中 grep 字符串的某种模式。

但是,我正在尝试在文本文件中搜索两个确切的字符串。

例如,这是我的 BookDB.txt 的内容:

Three Little Pigs : Mary Jane
Cinderella : Paul Johnson

我尝试使用read函数获取用户输入

echo Title :
read Title 

echo Author : 
read Author

接下来,我使用了 grep 命令,我从 link 获得了帮助。获取字符串并检查它是否存在于 BookDB.txt 文件中,并将 echo $? 命令输出分配给变量以显示一些消息。

grep -w "$Title" BookDB.txt
check1=`echo $?`    

grep -w "$Author" BookDB.txt    
check2=`echo $?`

if [ "$check1" -eq 0 ] && [ "$check2" -eq 0 ]; then
    echo Found
else
    echo Not Found
fi

尽管如此,用户输入 Three 作为 Title 并输入 Mary 作为 Authorecho$? 命令仍然返回 0。每当它返回 0 时,它就会显示文本文件中不需要的信息。

最佳答案

grep 搜索单词,它不会关心您是否输入全名,因此“Pigs”会匹配,“Little Pigs”也会匹配。无论作者或标题匹配如何(无上下文),它也会返回相同的结果。您可以通过在输入字符串的左侧或右侧包含分隔符 : 来处理它。

但是,awk有更好的方法

$ awk -F' *: *' -v author="Mary Jane" -v title="Three Little Pigs"      \
           '{a=author?author==$2:1; t=title?title==$1:1} t && a' file

您可以在其中控制是否要匹配作者和标题(给定的)或作者或标题(将 && 更改为 ||)。您可以提供其中一个值或同时提供两者,脚本将处理它。

关于linux - 使用 grep 检查文本文件中的 2 个精确字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41664290/

相关文章:

linux - 巴什脚本 : Combining Permutations of Contents in a Directory

linux - 在读取带有惰性字节串的大文件时减少内核开销

linux - bash脚本函数作用域

java - Java中的JIT编译是如何将动态编译好的指令加载到内存中的?

bash - 在bash脚本中减去两个时间戳

linux - 我如何使用 GREP 来确定文件中的每一行是否都与我的模式相匹配?

linux - O/P重定向到/dev/null时到哪里去了

linux - 从文件中提取并将详细信息粘贴到另一个文件

linux - 使用 grep 的不同结果

linux - 用于从文本日志文件中 Grepping/检索值的 Shell 脚本(sqlcode 字段值)