Linux Shell - Grep 命令

标签 linux shell command-line grep command

我在使用带有以下选项的 grep 时遇到问题:\{n\}\{n,\}\{n,m\}。我有一个名为“new”的文件,其中包含以下几行:

aaaa
aaa
aa
a

当我使用 grep 'a\{1\}' new 时,我得到了这个输出:

aaaa
aaa
aa
a

所以,基本上,这个命令会向我显示包含 1 次或多次连续出现的字符“a”的行,对吗?

此外,grep 'a\{1,\} new 会做与 grep 'a\{1\}' new 相同的事情吗?因为两者的输出相同。

最后一个,\{n,m\},我不太明白它的作用。

如果有人能帮助我,我将不胜感激。

最佳答案

来自 man grep:

   Repetition
       A regular expression may be  followed  by  one  of  several  repetition
       operators:
       ?      The preceding item is optional and matched at most once.
       *      The preceding item will be matched zero or more times.
       +      The preceding item will be matched one or more times.
       {n}    The preceding item is matched exactly n times.
       {n,}   The preceding item is matched n or more times.
       {n,m}  The  preceding  item  is  matched at least n times, but not more
              than m times.

该示例 grep 'a\{2,3\}' new 也匹配带有 aaaa 的行,因为前三个(或 2 个)a 。该行的其余部分并不重要。

如果您真的希望只匹配 2 或 3 个连续的 a,您可以使用 -o 标志。但请注意,这将从带有 aaaaa 的行中输出 aaaaa。为避免这种情况,您必须使用其他信息,例如示例换行符 ^$

顺便说一句。我建议使用 -E 标志(或相同的 egrep )以便扩展正则表达式支持。那时您不必转义括号。

输入

aaaaa
aaaa
aaa
aa
a

调用 grep -o -E '^a{2,3}$' 将给出输出:

aaa
aa

关于Linux Shell - Grep 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19877380/

相关文章:

python - 将 StdIn 重定向到 python manage.py shell 时从 StdIn 读取输入

Linux 设置文件夹及其所有子文件或文件夹的权限

linux - 删除文件/目录前询问确认

c - 使用 unix shell 测试系统的字节顺序

c++ - Win32 C/C++ 检查同一程序的两个实例是否使用相同的参数

selenium - 如何告诉 Webdriver 使用特定版本的 ChromeDriver?

windows - 如何使用 VBScript、命令行或其他方式获取 .m4v 格式电影的运行时长度?

c++ - C++中引用变量的地址

linux - shell 脚本如何判断它是否在支持 256 色的 xterm 窗口中运行?

linux - 文件大于目录的平均大小?