【问题标题】:Need help matching a pattern using egrep in bash scripting [ SED/GREP] [duplicate]需要帮助在 bash 脚本中使用 egrep 匹配模式 [SED/GREP] [重复]
【发布时间】:2019-04-22 18:04:59
【问题描述】:

所以我需要匹配给定单词列表中的字符串。 例如,如果我给出这样的输入

$ sh match_the_pattern.sh -i aei words.txt

它应该按顺序匹配字符“a”“e”和“i”。

字符串中的字母必须按该顺序出现在单词中,但其他字符可能出现在其间。

注意:字符串可能会改变,字典可能会改变。

我的方法:

  1. 读取输入
  2. 扫描文件名
  3. SED 或 GREP 组合来匹配字符串
  4. 输出

我不知道什么?第三部分。

while [[ $# -gt 0 ]]; do
  case $1 in
       -i)
    arg=$2
    egrep "*[$argument]*" $name
    shift ;;
  esac
  shift
done

什么没用

a+.*e+.*i+.*

sh match_the_pattern.sh -i aeiou words.txt

adventitious
adventitiousness
sacrilegious
abstemious
sacrilegiousness

如果你注意到,a,e,i,o,u 一个接一个。这就是我想要的。 我们要匹配的字符串可能会改变。

【问题讨论】:

  • grep 'a.*e.*i'?
  • egrep "a+.*e+.*i+.*" words.txt 确实匹配这些词。您发现问题出在哪里?
  • 原因是,你只是拿 aei 和匹配它。我已经明确提到 aei 只是一个样本,它是一个随参数变化的变量。它可以是 xyz、abc、euo 或任何东西。所以我们的 grep 不应该是很难编码的。它必须有参数或可变的东西。我希望这会有所帮助。
  • 这个问题基本上是“如何将一个字符串变成相同的字符串,每个字符之间插入.*”?

标签: bash shell scripting grep


【解决方案1】:

假设$argument 应该只包含字母;使用 sed 生成模式,使用 grep 匹配单词:

grep "$(sed 's/./&.*/g' <<< "$argument")" "$name"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 2021-04-17
    • 2019-02-24
    • 1970-01-01
    • 2014-07-02
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多