![对于 .txt 文件中的给定字符串(2 或 3 个单词)并打印整行。](https://linux22.com/image/132483/%E5%AF%B9%E4%BA%8E%20.txt%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%BB%99%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%882%20%E6%88%96%203%20%E4%B8%AA%E5%8D%95%E8%AF%8D%EF%BC%89%E5%B9%B6%E6%89%93%E5%8D%B0%E6%95%B4%E8%A1%8C%E3%80%82%20.png)
我的.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
。