首页 > 解决方案 > 用于在数据库中搜索名称的 Bash 脚本

问题描述

我有一个包含多个.txt文件的数据库,我需要在所有这些txt中自动搜索特定名称。

终端中,我通常会这样做grep word:otherword /path/to/file/text1.txt,我会获得所有结果的列表。

我怎样才能自动化所有,以便脚本问我“插入单词”然后插入其他单词” ,然后它搜索所有文件给我一个干净的结果“单词其他单词”

编辑1:

目前的代码

#!/bin/bash

    read -p "Insert Word: " insertWord
    read -p "Insert OtherWord: " insertOtherWord
    printf "Executing grep ${insertWord}:${insertOtherWord} $(find path/to/file/name.txt -name '*.txt')"
    grep "${insertWord}:${insertOtherWord}" $(find path/to/file/name.txt -name '*.txt')

编辑2:

#!/bin/bash

read -p "word3: " word3
read -p "word4: " word4
read -p "word1: " word1
read -p "word2: " word2
printf "Searching for ${word1}:${word2}:${word3}:${word4} $(find path/to/file -name '*.txt')"
grep -i -w "${word1}:${word2}:${word3}:${word4}" $(find path/to/file -name '*.txt') | cut -d":" -f2-

鉴于更新的脚本EDIT2并鉴于word2是一组可变长度数字,是否有一种方法可以:

  1. 搜索,或者搜索word1或两个或所有这些
  2. word2 不是必需的,但如果我不添加它,则搜索不会运行;试图添加通配符 * 但它给了我一个错误

输出示例是:

word1:numbervariablelenght:word3:word4

标签: bashsearchgrepscript

解决方案


这个 ..

#!/bin/bash

read -p "Insert Word : " insertWrod
read -p "Insert OtherWord : " insertOtherWord
printf "Executing grep ${insertWrod}:${insertOtherWord} $(find . -name '*.txt')"
grep "${insertWord}:${insertOtherWord}" $(find . -name '*.txt')

PS - 根据需要将选项调整为 grep

编辑

您可以替换命令中的路径,如果您想避免输出行的路径格式为path/to/file/file.txt:word:otherword您可以执行cut例如

#!/bin/bash

read -p "Insert Word : " insertWrod
read -p "Insert OtherWord : " insertOtherWord
read -p "Path : " somePath

# Make Sure Path exists and its a directory
if [ -d "$somePath" ] then
    grep "${insertWord}:${insertOtherWord}" $(find $somePath -name '*.cpp') | cut -d":" -f2- 
fi

推荐阅读