Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在方括号的开头添加插入符号如何影响结果?_Regex_Unix_Grep - Fatal编程技术网

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