.txtファイルから指定された文字列(2〜3単語)を取得し、行全体を印刷します。 [コピー]

.txtファイルから指定された文字列(2〜3単語)を取得し、行全体を印刷します。 [コピー]

私の.txtファイルには次の内容が含まれています。

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

最初の文字列は本のタイトル、2番目の文字列は著者、最後の文字列は本の番号です。誰かが著者名を使って検索したら、行全体を印刷したいと思います。 grepを使ってみました。

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

これを実行して検索するとフランク・ロックウッドこれらの2行を印刷します。しかし、入力文字列全体(名前と姓)が一致した場合は、その行を印刷したいと思います。

答え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また、変数をスペースを含む文字列に設定することを許可すると、authorgrep行は引用符なしで失敗しますauthor

関連情報