我正在尝试使用文件text.txt
上的grep命令找到正确的正则表达式。
问题
查找包含子字符串ad,bd,cd,dd,ed的文本中出现的所有单词。
查找所有出现的数字> 100
查找所有出现的数字> 100包含数字0或5
我的方法
grep -io '[a-e]*d' text
使用正确的子字符串打印单词,但不打印整个字符串/单词。
ad
d
d
ed
d
d
ed
d
d
d
d
ed
d
d
grep -io '[199][1-9]*' text
我相信我对正则表达式有所了解,但它仍会打印出正确的结果。
1973
197
17775
grep -io '[05][1-9]*' text
这是2.的延续,所以我不理解3.中的2.部分,但我相信我的字符串包含0或5的数字正确。
0
0
0
5
答案 0 :(得分:0)
对于(a)部分,grep的-o
选项使其仅打印 与该模式匹配的行的部分,但您的模式与整个单词不匹配。您只需调整模式以匹配[a-e]d
子字符串之前和之后每个单词的部分。
对于(b)部分,你的模式是错误的。例如,它与数字299或1000不匹配。您想要的数字模式是1
和9
之间的数字,后跟0
和9
之间至少两位数。
(c)部分是最棘手的。您必须匹配包含至少三位数的数字模式,第一个数字位于1
和9
之间,第一个位置为5
或0
或{{1在任何其他位置。您可能需要将其与5
运算符分隔为备选方案。看起来您可能需要三个:前导数字为|
的情况;第二个数字为5
或0
的情况,以及后一个数字为5
或0
的情况。在第三种情况下,您不能忘记在您匹配的5
或0
的任意一侧可能有任意数量的附加数字,包括零。
答案 1 :(得分:0)
A)查找包含子字符串ad,bd,cd,dd,ed的文本中出现的所有单词。
grep -ow '.*\(a\|b\|c\|d\|e\)d.*' text
或
egrep -ow '.*(a|b|c|d|e)d.*' text
B)查找所有出现的数字> 100
grep -ow '[1-9][0-9][0-9]\+' text
C)查找所有出现的数字> 100包含数字0或5
grep -ow '[1-9][0-9][0-9]\+' text | grep '\(0\|5\)'
或
grep -ow '[1-9][0-9][0-9]\+' text | egrep '(0|5)'
我正在使用选项-o
来输出它自己行上的每个匹配项,而不是输出模式的整行,以及指定匹配前后的选项-w
应该是一个词边界。