【问题标题】:Grep and search for parameters with bash script使用 bash 脚本 grep 和搜索参数
【发布时间】:2023-03-04 17:00:02
【问题描述】:

我正在尝试制作一个 bash 脚本来搜索多个文本文件中的单词;有 4 个参数,但脚本只有在我搜索所有这些参数时才有效,而不是在我只搜索一个或多个参数时(例如 word3 和 word4)。 Word2 是一个我不知道也不关心的可变长度的数字;我尝试添加通配符 * 但它给了我一个错误。

如果 word2 未知,我如何修改脚本以便搜索一个、两个更多或所有参数?

#!/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-

输出示例为:

word1:numbervariablelenght:word3:word4

编辑1:

*sample input
bash script.sh

word3: wordThree
word4: wordFour
word1: wordOne
word2: don't know
Searching for word1:word2:word3:word4

sample output
WordOne:somenumber:wordThree:wordFour*

【问题讨论】:

  • 你真的是想问如何grep "$word1:[^:]*:$word3:$word4" files

标签: bash search parameters grep script


【解决方案1】:

您可以使用 egrep 找到多种模式:

egrep -i -w "${word1}|${word2}|${word3}|${word4}" $(find path/to/file -name '*.txt')

【讨论】:

  • 您也可以使用grepgrep -e "$word1" -e "$word2" -e "$word3" -e "$word4" files
【解决方案2】:

让我给你一个通用的方法:

在文件中查找word1 AND word2

grep "word1" file | grep "word2"

在文件中查找word1word2

grep -E "word1|word2" file.

让我们做一个练习:

在文件中查找word1 AND (word2 OR word3):

grep "word1" file | grep -E "word2|word3"

如您所见,AND 可以使用管道实现。 OR 可以使用扩展的 grep(grep -E,有时缩写为 egrep)来实现。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多