Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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_Bash_Grep - Fatal编程技术网

Regex 灰显精确匹配/子串

Regex 灰显精确匹配/子串,regex,bash,grep,Regex,Bash,Grep,我有一组单词,看起来像: fruits.txt APPLE,2 apple,3 APPLE-ORANGE,3 APPLEORANGE-GRAPE,5 并试图只打印“苹果” 下面是我尝试过的,几乎所有出现类似问题的命令都返回相同的输出,如下所示: grep-iE“apple\b”fruits.txt 苹果,2 苹果,3 苹果橙,3###这是我想忽略的额外一行 我还尝试了以下操作,但没有返回任何内容。 grep-i'^apple$”fruits.txt 预期产出 苹果,2 苹果,3

我有一组单词,看起来像:
fruits.txt

APPLE,2  
apple,3  
APPLE-ORANGE,3  
APPLEORANGE-GRAPE,5  
并试图只打印“苹果”

下面是我尝试过的,几乎所有出现类似问题的命令都返回相同的输出,如下所示:
grep-iE“apple\b”fruits.txt

苹果,2
苹果,3
苹果橙,3###这是我想忽略的额外一行

我还尝试了以下操作,但没有返回任何内容。
grep-i'^apple$”fruits.txt

预期产出
苹果,2
苹果,3个

PS:请不要建议使用
grep-iE'apple\b'fruits.txt | grep-v“-”
如果使用grep“apple-ORANGE”,我不能在循环中使用此选项,这也会是一个问题。

尝试:

grep -i 'apple[ ,]' fruits.txt 
grep -iP 'apple\b(?=[\s,])' fruits.txt

APPLE,2
apple,3
APPLE-ORANGE,3
APPLEORANGE-GRAPE,5
applE , 8
AAple900
两张照片

APPLE,2
apple,3
applE , 8
两个正则表达式都搜索不区分大小写的apple,后跟至少一个
(空格)或

如果不想接受
(空格),只需删除字符组

或者,您应该对
grep
说什么是不允许跟随
apple
的,比如:

grep -iP 'apple[^\w-]' fruits.txt
grep -iE 'apple[^[:alnum:]-]' fruits.txt
搜索
apple
后面没有任何单词字符的内容或
-

尝试:

grep -i 'apple[ ,]' fruits.txt 
grep -iP 'apple\b(?=[\s,])' fruits.txt

APPLE,2
apple,3
APPLE-ORANGE,3
APPLEORANGE-GRAPE,5
applE , 8
AAple900
两张照片

APPLE,2
apple,3
applE , 8
两个正则表达式都搜索不区分大小写的apple,后跟至少一个
(空格)或

如果不想接受
(空格),只需删除字符组

或者,您应该对
grep
说什么是不允许跟随
apple
的,比如:

grep -iP 'apple[^\w-]' fruits.txt
grep -iE 'apple[^[:alnum:]-]' fruits.txt

搜索
apple
后面没有任何单词字符的内容或
-

您可以使用
awk
执行此任务:

$ awk -F, -v IGNORECASE=1 '$1 ~ /^apple$/' fruits.txt
APPLE,2  
apple,3
如果要传递要使用的shell变量,可以执行以下操作:

$ fruit=apple
$ awk -F, -v IGNORECASE=1 -v FRUIT="^$fruit\$" '$1 ~ FRUIT' fruits.txt
APPLE,2  
apple,3

您可以使用
awk
执行此任务:

$ awk -F, -v IGNORECASE=1 '$1 ~ /^apple$/' fruits.txt
APPLE,2  
apple,3
如果要传递要使用的shell变量,可以执行以下操作:

$ fruit=apple
$ awk -F, -v IGNORECASE=1 -v FRUIT="^$fruit\$" '$1 ~ FRUIT' fruits.txt
APPLE,2  
apple,3

为什么我们不能grep
apple,
有一个计划要与grep-w一起实施;我选择了
apple,
作为我最后的选择。你在寻找涉及grep的解决方案吗?如果没有,您可以使用bash参数扩展..为什么我们不能grep
apple,
有一个计划来实现这一点以及
grep-w
;我选择了
apple,
作为我最后的选择。你在寻找涉及grep的解决方案吗?如果没有,你可以使用bash参数扩展..太酷了!用解释来纠正答案。学到了一个新东西:)谢谢你,伙计!太酷了!用解释来纠正答案。学到了一个新东西:)谢谢你,伙计!精彩的!!它工作得很好!我有一个简短的问题;如何在循环中使用它,我的意思是如何使用像
$fruit
这样的变量而不是
apple
。我尝试了
awk-F-vfruit=$FRUIT,IGNORECASE=1'$1~/^FRUIT$/'fruits.txt
。但是运气不好。@ManivG不客气,很乐意帮忙
awk
/…/
内的文本视为正则表达式的一部分,因此它无法展开命名变量。为了解决这个问题,您可以在变量定义中放置正则表达式特殊字符,并省略
/…/
。查看我最近编辑中添加的解决方案。太棒了!!它工作得很好!我有一个简短的问题;如何在循环中使用它,我的意思是如何使用像
$fruit
这样的变量而不是
apple
。我尝试了
awk-F-vfruit=$FRUIT,IGNORECASE=1'$1~/^FRUIT$/'fruits.txt
。但是运气不好。@ManivG不客气,很乐意帮忙
awk
/…/
内的文本视为正则表达式的一部分,因此它无法展开命名变量。为了解决这个问题,您可以在变量定义中放置正则表达式特殊字符,并省略
/…/
。请参阅在我最近的编辑中添加的解决方案。