对于 .txt 文件中的给定字符串(2 或 3 个单词)并打印整行。

对于 .txt 文件中的给定字符串(2 或 3 个单词)并打印整行。

我的.txt文件包含这些内容:

The Law and Lawyers of Pickwick, by Frank Lockwood                 21214
Frankenstein, by Mary Wollstonecraft                               20

第一个字符串是书名,第二个字符串是作者,最后一个字符串是书号。当有人使用作者姓名搜索时,我想打印整行。我尝试使用 grep。

#!/bin/bash
BOOKFILE="/home/sk/GUTINDEX.ALL"
author=$1
if [[ -z "$author" ]]; then 
echo -n "Author name : "
read author
fi
grep $author $BOOKFILE

如果我运行这个并搜索弗兰克·洛克伍德它打印这两行。但是我想在整个输入字符串匹配时打印该行(名字和姓氏)

答案1

你应该把它改成这样:

#!/bin/bash
BOOKFILE="/home/sk/GUTINDEX.ALL"
author=$@
if [[ -z "$author" ]]; then 
    read -rp "Author name: " author
fi
grep "$author" "$BOOKFILE"

如果您将其运行为:

$ ./script Frank Lockwood

您正在将位置参数 1 设置为Frank并将参数 2 设置为Lockwood。您的脚本中未使用参数 2。 $@是一个表示所有位置参数的数组。

另外,如果您允许将变量read设置author为带有空格的字符串,那么在不加引号的情况下, grep 行将会失败author

相关内容