Grep 2 个变量,中间有一个“:”
Grep 2 variables with a ":" in between
我目前在这段代码上停留了很长时间。下面是我的代码。
if grep -ixqF $bookName:$authorName BookDB.txt
then echo "Book found"
else
echo "Book not found"
BookDB 基本上包含如下所示的书名和作者信息,其中语法为 "Book-name:Author".
Mary had a little nose:JamesPoppcock
Merry Christmas:Christ Sake
Kinky Asians:Walter Bedding
但是,程序总是输出 "Book found",即使书和作者不在 BookDB.txt 中也是如此。我想从这个程序中得到的是,它将读取 2 个用户输入,$bookName
和 $authorName
并将其与数据库完全匹配(包括分号)。
任何帮助将不胜感激!
编辑:程序总是输出 "Book not found",而不是 "Book found"
引用变量扩展部分:
grep -ixqF "$bookName:$authorName" BookDB.txt
没有引用的扩展会受到单词拆分(和全局扩展)的影响,只有第一个单词被用作搜索模式,其余的被视为文件名以及 BookDB.txt
.
我为自己的愚蠢错误感到非常尴尬。为了使事情更简单,我没有提供包含 3 个以上参数的原始文本文件。我意识到我的代码的问题是 grep 的 -x 参数,它只找到匹配整行的字符串。
删除它后,程序运行正常。
只有在 Cyrus 评论之后我才意识到这可能是我原来的 BookDB.txt
的问题。
谢谢大家!!
将您的 if 语句更改为以下应该可以解决您的问题
if [ "$(grep -ixF "$bookName:$authorName" BookDB.txt)" != "" ]
根据@heemayl 的建议,您需要在变量周围使用双引号。
此外,您可以不使用 grep 的 -q 选项,而是简单地将输出与 != ""
进行比较。
我目前在这段代码上停留了很长时间。下面是我的代码。
if grep -ixqF $bookName:$authorName BookDB.txt
then echo "Book found"
else
echo "Book not found"
BookDB 基本上包含如下所示的书名和作者信息,其中语法为 "Book-name:Author".
Mary had a little nose:JamesPoppcock
Merry Christmas:Christ Sake
Kinky Asians:Walter Bedding
但是,程序总是输出 "Book found",即使书和作者不在 BookDB.txt 中也是如此。我想从这个程序中得到的是,它将读取 2 个用户输入,$bookName
和 $authorName
并将其与数据库完全匹配(包括分号)。
任何帮助将不胜感激!
编辑:程序总是输出 "Book not found",而不是 "Book found"
引用变量扩展部分:
grep -ixqF "$bookName:$authorName" BookDB.txt
没有引用的扩展会受到单词拆分(和全局扩展)的影响,只有第一个单词被用作搜索模式,其余的被视为文件名以及 BookDB.txt
.
我为自己的愚蠢错误感到非常尴尬。为了使事情更简单,我没有提供包含 3 个以上参数的原始文本文件。我意识到我的代码的问题是 grep 的 -x 参数,它只找到匹配整行的字符串。
删除它后,程序运行正常。
只有在 Cyrus 评论之后我才意识到这可能是我原来的 BookDB.txt
的问题。
谢谢大家!!
将您的 if 语句更改为以下应该可以解决您的问题
if [ "$(grep -ixF "$bookName:$authorName" BookDB.txt)" != "" ]
根据@heemayl 的建议,您需要在变量周围使用双引号。
此外,您可以不使用 grep 的 -q 选项,而是简单地将输出与 != ""
进行比较。