linux里面grep “ol.*oy” test.txt命令作用是什么?

发布网友 发布时间:2022-04-23 12:50

我来回答

3个回答

懂视网 时间:2022-05-06 21:24

grep -E l{2,} 2.txtgrep -E h(ell|a)o test.txtgrep [a-z]{5,} test.txtgrep -xf a.txt b.txt //查询a与b共同存在的行grep -vxf b.txt a.txt //查询a的行不在b文件里面的,就是a比b多出来的行 grep -v ^h test.txt //显示非以h开发的 grep -E ^(h|y) tes

grep -E 'l{2,}' 2.txt
grep -E 'h(ell|a)o' test.txt
grep '[a-z]{5,}' test.txt
grep -xf a.txt b.txt //查询a与b共同存在的行
grep -vxf b.txt a.txt //查询a的行不在b文件里面的,就是a比b多出来的行
 
grep -v '^h' test.txt //显示非以h开发的
 
grep -E '^(h|y)' test.txt //-E支持扩展正则,相当于egrep
 
grep -A 1 'hello' test.txt //除了显示匹配到的行也显示它之后的一行
grep -B 1 'hello' test.txt //除了显示匹配到的行也显示它之前的一行
grep -C 1 'hello' test.txt //除了显示匹配到的行也显示它之前和之后的一行
 
grep -r "hello" xx //在xx目录查找
grep -c //统计匹配的行数
grep -n //显示行号

grep -v '^hello' test.txt //显示不以hello开头的行
--很聪明的写法,第一位不以h开发,第二位不以e开发。。。
 grep '^[^h]|^.[^e]|^..[^l]|^...[^l]|^....[^o]'
 
[options]主要参数:
-c:只
输出匹配行的计数。 -I:不区分大 小写(只适用于单字符)。 -h:查询多文件时不显示文件名。 -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及 行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。 命令正则表达式: . 匹配单个字符 如..X yiX能查出来 ^ 匹配行首 ^d 每行第一个字符为d $ 匹配行尾 T$ 每行最后一个字符为T * 匹配任意字符串 屏蔽特殊字符的含义 A{2}B 字母A出现两次 A{2,}B 至少出现两次 A{2,4}B 出现2到4次 [0-9]{4}xx[0-9]{4} 前四个是数字,中间是xx,后四个是数字 pattern正则表达式主要参数: : 忽略正则表达式中特殊字符的原有含义。 ^:匹配正则表达式的开始行。 $: 匹配正则表达式的结束行。 <:从匹配正则表达 式的行开始。 锚定单词的开始,如:/:到匹配正则表达式的行结束。 [ ]:单个字符,如[A]即A符合要求 。 [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。 。:所有的单个字符。 * :有字符,长度可以为0 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 (?!pattern) 负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。 例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式 pcregrep 'Windows (?=2000|95|98|NT)' test.txt //Windows后面是2000或95.. pcregrep 'Windows (?!2000|95|98|NT)' test.txt //Windows后面非2000,95,98等 pcregrep 'Windows (?:95|98|NT|2000)' test.txt //与第一种一样 egrep: 为 grep 的扩充版本, 改良了许多传统 grep 不能或不便的操作. 比方说: - grep 之下不支持 ? 与 + 这两种 modifier, 但 egrep 则可. - grep 不支持 a|b 或 (abc|xyz) 这类"或一"比对, 但 egrep 则可. fgrep: 不作 RE 处理, 表达式仅作一般字符串处理, 所有 meta 均失去功能. pcregrep: pcregrep - a grep with Perl-compatible regular expressions , perl正则,是最流行和规范的

热心网友 时间:2022-05-06 18:32

grep 命令是匹配关键词相应行的功能, 

“ol.*oy” 这是正则关键词  意思是 ol+ .*表示任意个 任意字符+oy 的词

test.txt 是文件名

综合所述就是在test.txt文件中匹配ol...oy相应词对应的行。

热心网友 时间:2022-05-06 19:50

题主你好,

你的问题其实可以分为个知识点:

    1.grep命令的一般用法;

         grep一般是用来将一个文件中包含指定字符串的行打印出来,举例来说:

         有一个名为hello.txt的文件,内容为:

             123

             234

             345

       然后我有一条命令:

           grep "2" hello.txt

       执行结果为:

           123

           234

         也就是将文件hell.txt中所有包含2的行都打印出来

    2.  ".*" 是啥意思;

          点星 它俩在一起表示"匹配任意长度的任意字符",举例来说:

              a.*b  可以匹配 a1b  a0b ahellob a...dfsfsb 等等只要开头是a结尾是b的字符串就会被匹配上

-----

所以 grep "ol.*oy" test.txt这条命令的作用是:

在 test.txt这个文件中将包含ol.*oy的字符串打印出来.

假设test.txt文件内容为:

    abcdol666oylsajdflj

    defasdfol88888aboy

    12ol34

    则问题中grep "ol.*oy" test.txt输出的结果为:

    abcdol666oylsajdflj

    defasdfol88888aboy

即第一行中ol.*oy匹配的是ol666oy, 此时.*匹配的是666

第二行ol.*oy匹配的是ol88888aboy, 此时.*匹配的是88888ab

-----

写在最后:   .*是一种常用的正则表达式, 文本匹配中正则表达式作用很大,有精力题主可以系统学一下.

希望可以帮到题主,欢迎追问.

 

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com