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 Unix命令仅grep以“开始”开头的子字符串;xyz……”;到第一个空间?_Regex_Unix_Grep - Fatal编程技术网

Regex Unix命令仅grep以“开始”开头的子字符串;xyz……”;到第一个空间?

Regex Unix命令仅grep以“开始”开头的子字符串;xyz……”;到第一个空间?,regex,unix,grep,Regex,Unix,Grep,我有一段文字: 这是我的=测试和类=76 这是我的=测试和类=78 这是my=test2和class=76 这是my=test3和class=75 这是my=test1和class=79 我想在不打印整行的情况下,将所有以“class=”开头的单词与值进行grep。输出应为: class=76 class=78 class=76 class=75 class=79 有什么命令可以帮我吗 我试过这个: grep -E '(^|\s+)class=(?=\s|$)' file 但是没有得到任何输

我有一段文字:

这是我的=测试和类=76

这是我的=测试和类=78

这是my=test2和class=76

这是my=test3和class=75

这是my=test1和class=79

我想在不打印整行的情况下,将所有以“class=”开头的单词与值进行grep。输出应为:

class=76
class=78
class=76
class=75
class=79
有什么命令可以帮我吗

我试过这个:

grep -E '(^|\s+)class=(?=\s|$)' file
但是没有得到任何输出。

您的
(^ |\s+)类=(?=\s |$)
模式不符合POSIX,因为它包含一个正向的前瞻
(?=\s |$)
,用于匹配后跟空白或字符串结尾位置的位置。由于您希望匹配
类=
后面的数字,因此即使在PCRE正则表达式中,这种前瞻也没有意义。
(^ |\s+
组旨在匹配字符串的开头或1个或多个空格,但这里似乎只需要单词边界即可

你可以用

grep -oE '\<class=[^ ]+' file
使用grep(GNU grep)2.27测试。

您的
(^ |\s+)类=(?=\s |$)
模式不符合POSIX,因为它包含一个积极的前瞻
(?=\s |$)
,用于匹配后跟空白或字符串结尾位置的位置。由于您希望匹配
类=
后面的数字,因此即使在PCRE正则表达式中,这种前瞻也没有意义。
(^ |\s+
组旨在匹配字符串的开头或1个或多个空格,但这里似乎只需要单词边界即可

你可以用

grep -oE '\<class=[^ ]+' file
使用grep(GNU grep)2.27进行测试。

使用Perl oneliner

> data="This is my=test and class=76 This is my=test and class=78 This is my=test2 and \n class=76 This is my=test3 and class=75 This is my=test1 and class=79."
> perl -0777 -ne ' { while(/(class=(\d+))/g) { print "$1\n" } } ' <<< "$data"                                                                                   
class=76
class=78
class=76
class=75
class=79
> 
使用Perl oneliner

> data="This is my=test and class=76 This is my=test and class=78 This is my=test2 and \n class=76 This is my=test3 and class=75 This is my=test1 and class=79."
> perl -0777 -ne ' { while(/(class=(\d+))/g) { print "$1\n" } } ' <<< "$data"                                                                                   
class=76
class=78
class=76
class=75
class=79
> 

可能重复的可能重复的可能重复的可能重复的可能重复的非常感谢,现在,让我们假设我想在“class=”之后但在第一个空格出现之前获取字符串。那么修改后的命令是什么?
grep-oE'\n非常感谢您的工作,现在,让我们假设我想在“class=”之后但在第一个空格出现之前获取字符串。那么修改后的命令是什么?
grep-oE'\