【问题标题】:Iterate a user string in bash to add vowels to string在 bash 中迭代用户字符串以将元音添加到字符串
【发布时间】:2016-12-08 18:49:24
【问题描述】:

所以我有一个包含 30,000 多个单词的单词列表。我的目标是制作一个脚本,其中包含一个没有常量的单词(例如:mbnt),并以某种方式添加常量并与单词列表进行比较以找到至少单词“ambient”,尽管它也会找到其他单词如果你要取出他们所有的元音,读作“mbnt”。 到目前为止,这是我的 bash 脚本

f=/wordList
anyVowel=[aAeEiIoOuU]
nonVowel=[^aAeEiIoOuU]
input=$1
for (( i=0; i<${#input}; i++ ));
do
grep "${input:$i:1}$nonVowel" $f | head -10
done

然而,这只会返回一个普通的单词列表,其中包含用户输入的一些字符。有什么想法我可能做错了吗?

【问题讨论】:

  • 对于初学者,您正在尝试在bash 中进行数据处理。
  • 出错的一件事是输入字符一次被搜索一个。需要以正确的顺序一起搜索它们。此外,它们需要与元音混合,而不是非元音。如果单词列表包含标点符号,则将它们与非辅音混合可能是有意义的。然后don't 将匹配dnt

标签: bash loops unix word


【解决方案1】:

awk 来救援!

$ awk -v w=whr '{a=tolower($0); 
                 gsub(/[^a-z]/,"",a); 
                 gsub(/[aeiou]/,"",a)} 
                a==w' words

where

在单词中寻找元音删除单词“whr”(组成自定义字典)。转换为小写,过滤掉非字母并删除元音,最后寻找与给定单词的匹配项。

请注意,如果您要查找很多单词,这将非常低效,但也许可以作为您解决方案的模板。

【讨论】:

    【解决方案2】:

    试试

    wordsfile=wordList
    consonants=$1
    
    # Create a regular expression that matches the input consonants with
    # any number of vowels before, after, or between them
    regex='^[[:space:]]*[aeiou]*'
    for (( i=0; i<${#consonants}; i++ )) ; do
        regex+="${consonants:i:1}[aeiou]*"
    done
    regex+='[[:space:]]*$'
    
    grep -i -- "$regex" "$wordsfile"
    

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多