Regex 在方括号的开头添加插入符号如何影响结果?
以下两者之间的区别是什么:Regex 在方括号的开头添加插入符号如何影响结果?,regex,unix,grep,Regex,Unix,Grep,以下两者之间的区别是什么: grep "[-0-9]" xyz.lst 以及: 第二个表示否定“一切不是……”插入符号(^)否定类。第一个表达式匹配负号和数字0到9。在第二个表达式中,它将匹配任何不是减号或数字的内容。此[-0-9]是字符-和字符范围0-9的字符类,即以下-,0,1,2,3,4,5,6,7,8,9(它匹配任何数字或连字符)。以^开头的字符类是对该类的否定,即它匹配该类中任何非字符 演示: $ cat file - 1 a 2 b 3 c - $ grep '[-0-9]'
grep "[-0-9]" xyz.lst
以及:
第二个表示否定“一切不是……”插入符号(
^
)否定类。第一个表达式匹配负号和数字0到9。在第二个表达式中,它将匹配任何不是减号或数字的内容。此[-0-9]
是字符-
和字符范围0-9
的字符类,即以下-,0,1,2,3,4,5,6,7,8,9
(它匹配任何数字或连字符)。以^
开头的字符类是对该类的否定,即它匹配该类中任何非字符
演示:
$ cat file
-
1
a
2
b
3
c
-
$ grep '[-0-9]' file
-
1
2
3
-
$ grep '[^-0-9]' file
a
b
c
其中一个会在行中的任何位置查找每一行的数字或
-
(破折号)字符
另一个查找每一行的内容不是数字或破折号
例如,如果该行位于文件中,则这两个命令都将找到该行:
k9
因为它包含一个数字,而另一个不是
请注意,如果在第二种情况下您想要的是“显示不包含数字或破折号的每一行”,那么您想要的是以下内容之一:(任一命令都可以使用)
^是类的求反,所以显示不带“-”或数字的行输出有什么区别???@user2196728插入符号的含义在字符类中更改。@aet:这是错误的<代码>[^-0-9]匹配至少包含一个不在集合中的字符的任何行
[-0-9]
。你看到区别了吗?[-0-9]和“[-0-9]”之间有区别吗?“
这里是grep用来表示模式的分隔符。它们不是模式的一部分,所以不是。如果文件包含123 abc 123abc abc123-123-abc123--abc123-abc123-我不知道输入中的换行符在哪里,所以无法确定。为什么不自己试试呢!?
k9
grep -v '[-0-9]' xyz.lst
grep '^[^-0-9]*$' xyz.lst