【发布时间】:2015-12-31 21:42:47
【问题描述】:
这是作业:
编写一个脚本,该脚本将生成一个由三到五个字母单词组成的排序列表。输入文本将从在线 ls 手册页生成(从“man ls”命令输出)。
这是我目前的代码:
man ls | sed '!s/ //g' | tr 'A-Z' 'a-z' | tr -s '\040' '\012' | sort | uniq -u
这就是我卡住的地方。我们提供了获得所需结果的步骤,但是我无法找出正确的 grep 命令。这些是方向:
- 使用单个 grep 命令提取 3 到 5 个字母的单词。请记住,每个“单词”现在都在自己的行中。您将需要使用一个正则表达式来指定整行(而不仅仅是在该行某处找到的模式)。我们知道星号代表“零个或多个先前的模式”。什么正则表达式用于表示“一行上的前一个模式的三到五个实例?”。 [整线匹配?你有 regurar 表达式“锚点”来指定行的开始和结束。使用它们!
我认为它应该看起来像这样,但它不起作用。
grep '{3,5}'
额外信息
- 过滤掉除空格和字母字符 (A-Za-z) 之外的所有字符。您可以通过使用流编辑器 (sed) 来删除(用任何内容替换)不在该集中的所有字符来做到这一点。提示:如何指定正则表达式以匹配不是字母或空格字符的单个字符?
- 为避免重复,请将所有字母转换为相同大小写。应该使用翻译命令(tr)来执行此操作(参见教科书的第 83 页)。例如,“The”和“the”需要被视为同一个词。通过使所有文本大小写相同(大写或小写),您将避免多次列出同一个大小写混合的单词。
- 修改剩余的文本,使每个“单词”都放在自己的行上。使用 tr 命令将所有空格转换为换行符。现在,每个“单词”都单独成行。不要担心空行。它们稍后会被过滤掉。
- 使用 sort 命令对行(“单词”)进行排序。有没有我们可以使用 sort 来删除重复行的选项?使用该选项。
- 使用单个 grep 命令提取 3 到 5 个字母的单词。请记住,每个“单词”现在都在自己的行中。您将需要使用一个正则表达式来指定整行(而不仅仅是在该行某处找到的模式)。我们知道星号代表“零个或多个先前的模式”。什么正则表达式用于表示“一行上的前一个模式的三到五个实例?”。 [整线匹配?你有 regurar 表达式“锚点”来指定行的开始和结束。使用它们! ]
我对此很陌生,并且无法在任何地方找到正确的方法,可能是因为我没有在寻找正确的东西。如果您熟悉如何做到这一点,如果您也能解释它是如何工作的,而不是仅仅给出答案,我将不胜感激。非常感谢您的帮助!
【问题讨论】:
-
'{3,5}.'然后你必须匹配整行,这意味着锚定你可以自己查找的开始和结束。
标签: bash unix terminal grep pipe