shell - 如何搜索包含特定“关键字:字符串”对的文件并使用 awk 打印其全部内容?
问题描述
我得到了一个项目来制作一个项目来将书籍记录存储在不同文件的目录中。
如果用户想按书名或作者搜索一本书,我想搜索目录中的文件以找到与关键字匹配的字符串并使用 awk 打印整个文件。如果用户想删除我想删除的文件。我尝试使用以下代码进行搜索部分,但它只打印该行而不是文件的全部内容。
Records目录包含1.txt、2.txt、3.txt……
例子
1.txt
author: jhon
title : book1
year : 2000
pages : 342
我会很感激有人帮助我。
#!bin/bash
BOOK=./Records/*.txt
# Ask the user what to look for.
echo -n -e "What field would you like to search author or title: "
read field
echo -n "In the field = \"$field\", what string should I find? "
read string
# Find the string in the selected field
case $field in
"author" ) # Search for a specific name
awk -v var=$string -F ":" '$2~ var {printf "Record: %d\n\t%s\n\t%s\n\t%s, %s, %s\n\t%s\n", NR=1 , $1, $2}' $BOOK
;;
"title" ) # Search for a specific name
awk -v var=$string -F ":" '$2 ~ var {printf "Record: %d\n\t%s\n\t%s\n\t%s, %s, %s\n\t%s\n", NR, $1, $2 }' $BOOK
;;
"*" ) # Search pattern not recognized
echo "I did not understand your field name";
;;
esac
exit 0
解决方案
不是完全替换脚本,而是您可以扩展的想法
...
case "$field" in
author) # Search for a specific name
grep -lF "author: $search_string" $BOOK | xargs cat
在文件中搜索文字字符串并打印匹配的文件名,通过管道连接到 cat 以打印文件的内容......
推荐阅读
- django - Heroku-postgress 中与数据库的连接太多
- javascript - React Javascript - 复制的对象不包含任何更改
- azure - 如何以编程方式确定 Azure DSC 扩展的设置字符串
- php - 从函数返回特定的数组形式
- android - 我对响应式布局使用 ConstraintLayout 有问题
- reactjs - 仅当通过 curl 或 axios 调用 URL 时,才会由 react-scripts 代理 URL
- matlab - 如何使用 probplot、Matlab 获得与给定概率值对应的 X 值?
- python - 在python中创建可以返回对象的lambda函数
- java - 为什么我不能使用 MySQL 的 mysql.connector.java 库?
- amazon-web-services - AccessControl 属性 - s3 存储桶