Bash 关于正则表达式、通配符和grep的问题

Bash 关于正则表达式、通配符和grep的问题,bash,unix,Bash,Unix,1) 例如,查找任何以大写字母开头并以句点结尾的行时,都会使用以下表达式: $grep“^[A-Z].\.$”demo.txt--1 grep'^[A-Z].\.$'demo.txt和表达式1(使用单引号,我尝试过,结果似乎是一样的)之间有什么区别 grep'^[A-Z]*\.$”demo.txt和表达式1(句点是什么?)之间有什么区别 2) 要查找文件中包含左括号和右括号的每一行(中间只有字母和单个空格),请使用 $grep”([A-Za-z]*)”demo.txt,是否有其他方法可以使用{}

1) 例如,查找任何以大写字母开头并以句点结尾的行时,都会使用以下表达式:

$grep“^[A-Z].\.$”demo.txt
--1

grep'^[A-Z].\.$'demo.txt
和表达式1(使用单引号,我尝试过,结果似乎是一样的)之间有什么区别

grep'^[A-Z]*\.$”demo.txt
和表达式1(句点是什么?)之间有什么区别

2) 要查找文件中包含左括号和右括号的每一行(中间只有字母和单个空格),请使用
$grep”([A-Za-z]*)”demo.txt
,是否有其他方法可以使用
{}
表示相同的内容? 类似于
$grep“([A-Za-z]\{…\})”demo.txt的东西

3) 假设我们要搜索一个名为letter.txt的文本文件的内容,查找以以下单词之一开头的行的次数:DO、DOO或DOOO。如何使用grep命令(仅使用一个开关,不能使用它们或,并使用单引号) 我试过这样的
grep-c'^D(O){1,3}letter.txt
似乎不对

使用单引号,我尝试了一下,结果似乎是一样的)

引用更改了shell分析参数的方式。看

这段时间是干什么的?)

匹配任何字符。
*
与前面的字符或组匹配零次或多次,因此
*
匹配任何内容。研究什么是“正则表达式”。正则表达式不是shell globbing,请参见
man7regex
vs
man7glob

使用{}表示同一事物还有其他方法吗

就我所理解的问题而言,no.
是由
)表示的字符,而不是由
{
,因此我不理解如何将
{
匹配

DOO、DOO或DOO。我们如何使用grep命令(仅使用一个开关,不能使用它们或,并使用单引号)

我想:

grep 'DO'
因为它与
DOOO
匹配。如果您想:

grep 'DO\|DOO\|DOOO'
但如果您想使用绑定,您可以:

grep 'DO\{1,3\}'
像这个grep-c“^D(O){1,3}”letter.txt一样,它似乎不正确

当然可以,因为
匹配一个文本
{
匹配一个文本
{
)。如果要用基本正则表达式表示一个组,请转义
{
字符

# all these lines do the same.
grep 'DO\{1,3\}'
grep 'D\(O\)\{1,3\}'
grep -E 'D(O){1,3}'
grep -E 'DO{1,3}'

研究基本正则表达式和扩展正则表达式之间的差异。

请格式化您的帖子。使用反勾“
将内容放入代码块中
或用4个空格缩进。糟糕,我已经格式化了。谢谢
--1
grep“^[A-Z].\$”中做了什么demo.txt--1
?抱歉,表达式1,因此我不需要每次都键入它。这是什么意思
$grep'^[A-Z]*\.$'demo.txt
没有句号?我现在明白了
*
的意思,但我想我把它和正则表达式和通配符混为一谈了
*
这个*匹配前面的字符或组零次或多次
这个
[A-Z]*
匹配
[A-Z]
零次或多次。命令
ls*.d?c
将列出类似
的东西。d_c
。为什么这里的句点实际上意味着
ls*.d?c
这个
*
意味着什么,为什么我们不使用
*
。感谢您的帮助,我只是觉得如果
这个*与pr匹配,我就搞糟了当我执行命令时,
ls letter1[1-3]*.txt
letter1.txt
将不会列出零次或多次接收字符或组([1-3]零次