【问题标题】:Find animal-060, animal-061, animal-062 ..., animal-069 in .txt using linux terminal使用linux终端在.txt中查找animal-060、animal-061、animal-062 ...、animal-069
【发布时间】:2018-11-15 00:33:57
【问题描述】:
我想使用 linux 终端在 .txt 文档中查找字符串 animal-0**。 ** 是从 60 到 69 的数字。我想我必须在命令中使用 grep 和正则表达式:grep -E 'animal-0[60-69]'animallist.txt
这会是正确的命令吗,或者它也会找到 ima6,例如,因为 ima60 是 '' 中的数字和字母的一部分。
抱歉语法错误,英语不是我的母语。
【问题讨论】:
标签:
regex
linux
terminal
grep
【解决方案1】:
你已经很接近了!请记住,正则表达式字符类(方括号之间的集合或范围)会查找一系列字符,并且只会匹配一次,除非您使用 * 或 + 等另行指定。在您的示例中,[60-69] 与[690-6] 将匹配6、9 或0-6 范围内的任何单个字符。
要找到 60 到 69 之间的数字,我们必须将这些数字视为一个字符串。
以此为例:假设我们正在寻找“Za”到“Zj”,而不是“60”到“69”。在这种情况下,我们将使用模式Z[a-j]。
在你的问题上使用上面的例子,我们可以用“6”代替“Z”,用“0-9”替换“a-j”,给我们模式:
animal-06[0-9]
作为一个完整的命令,这将是:
grep -E 'animal-06[0-9]' animallist.txt
【解决方案2】:
是的,如果您使用grep -E 'animal-06[0-9]' animallist.txt,它将起作用
【解决方案3】:
grep -E 'animal-06[0-9]' animallist.txt
不,它不会找到 ima60。你的 [60-69] 也不会像你想的那样做。找到一个很好的资源来教授 RegEx。