gpt4 book ai didi

linux - 按书名/作者搜索书籍

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:14 25 4
gpt4 key购买 nike

你好,我是 shell 编程的新手,希望你能指导我,谢谢。

您好,我需要一个函数来从 .txt 文件中搜索书名或作者,并输出以下内容

Title:*Enter*
Author:Scissorhands

找到 3 条记录:傻瓜版 C++,John Scissorhands,15.01 美元、10、5Java 傻瓜版,剪刀手玛丽,16.02 美元,20 岁,15 岁VB.NET 傻瓜版,剪刀手爱德华,17.03 美元、30 美元、25 美元

例如

Found 3 records : 
C++ for dummies, John Scissorhands, $15.01, 10, 5
Java for dummies, Mary Scissorhands, $16.02, 20, 15
VB.NET for dummies, Edward Scissorhands, $17.03, 30, 25

我的文件格式如下

书名:作者:价格:数量:售出数量

哈利波特:詹姆斯:12.99:197:101

function Search_book
{
FILE="/home/student/Downloads/BookDB.txt"
echo found 1 records : $FILE contents
cat FILE
}

最佳答案

编辑:抱歉,我误解了你的问题。

更新混合/解决方案:

#!/bin/bash

read -p "Enter search term: " search
perl -ne '
BEGIN{ $pattern = $ARGV[0]; shift; $n=0 }
@a=split /:/;
if ($a[0] =~ m/$pattern/i or $a[1] =~ m/$pattern/i) {
print "$a[0], $a[1],\$$a[2],$a[3],$a[4]\n";
$n += 1;
}
END{ print "Found $n title(s).\n" }
' "$search" /home/student/Downloads/BookDB.txt

输出:

$ <b>./search.sh</b>
Enter search term: <b>star wars vi</b>
Title: Star wars VI - return of the jedi
Found 1 title(s).

并不是说您需要通配符的正则表达式(即 . 而不是 ?.* 而不是 * 等),并且您无需在搜索词的开头/结尾放置通配符即可在给定(子)字符串中的任何位置查找匹配项。

当然你也可以完全用 Perl 来做,没有 shell 脚本包装器:

#!/usr/bin/env perl

use strict;
use warnings;

my $booklist = './books.txt';
my @book;

print "Enter search term: ";
chomp (my $pattern = <>);

open BOOKS, "<$booklist" or die $!;

my $n = 0;
foreach (<BOOKS>) {
chomp;
@book = split /:/;
if ($book[0] =~ m/$pattern/i or $book[1] =~ m/$pattern/i) {
print "$book[0], $book[1],\$$book[2],$book[3],$book[4]\n";
$n += 1;
}
}

close BOOKS;

print "Found $n title(s).\n";

对于 解决方案见Adrian Frühwirth's answer .

关于linux - 按书名/作者搜索书籍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17851390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com