给出用户输入的包含'n'个字母的Grep单词

时间:2014-10-10 04:34:41

标签: linux bash shell grep

我正在尝试创建一个脚本(bash),它将从用户获取输入(整数)并grep包含该字母数的所有单词。我很好grep基本上是如何工作的,但我不确定如何使用来自用户的输入来确定输出

这是我的开始:

#!/bin/sh
echo " Content type: text/html"
echo

x=`expr $1`

我非常确定grep命令就像grep ^ ... 来自用户 $的整数一样简单。只是不知道如何使用用户输入。谢谢!

编辑:我应该提到"用户输入"将作为参数输入(./script 6)

2 个答案:

答案 0 :(得分:3)

./script 6运行此脚本,它将从文件text中选择所有6个字母的单词并显示它们:

#!/bin/sh
grep -Eo "\<[[:alpha:]]{$1}\>" text

正则表达式的关键部分:

  • \<表示单词的开头。

  • [[:alpha:]]{$1}表示$1个字母字符。如果您希望撇号(例如don't中的撇号)被视为有效的单词字符,请将其添加到外部方形支票中,如下所示:[[:alpha:]']{$1}

  • \>表示单词的结尾。

grep理解人类语言的能力有一些限制。例如,在字符串don't中,它将撇号视为单词边界。

实施例

我针对问题的文本运行了这个脚本:

$ ./script.sh 9
basically
determine
mentioned
$ ./script.sh 10
containing

答案 1 :(得分:0)

您可以使用read来管理用户的输入。

#!/bin/sh
echo $1 | grep ".\{$2\}"

现在如果您将脚本调用为./script hello 5

位置参数$1hello$25

此处{m}m行的行与.匹配,任何字符都匹配m