我对 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
作为 Author
,echo$?
命令仍然返回 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/