[英]Greping exact match/substring
我有一组类似的单词:
fruits.txt
APPLE,2
apple,3
APPLE-ORANGE,3
APPLEORANGE-GRAPE,5
并尝试仅打印“苹果”。
这是我尝试过的,几乎所有具有类似问题的命令都返回相同的输出,如下所示:
grep -iE "apple\\b" fruits.txt
APPLE,2
苹果,3
APPLE-ORANGE,3 ##这是我要忽略的多余行
我也尝试了以下内容,但未返回任何内容。
grep -i '^apple$' fruits.txt
预期的输出
APPLE,2
苹果,3
PS:请不要在grep -iE 'apple\\b' fruits.txt | grep -v "-"
上提出建议grep -iE 'apple\\b' fruits.txt | grep -v "-"
grep -iE 'apple\\b' fruits.txt | grep -v "-"
如果使用“ 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
两个正则表达式都搜索不区分大小写的苹果,然后搜索至少一个 (空间)或
,
。
如果你不想接受 (空格)只需删除字符组...
或者,你应该说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
如果要向awk
传递要使用的shell变量,可以执行以下操作:
$ fruit=apple
$ awk -F, -v IGNORECASE=1 -v FRUIT="^$fruit\$" '$1 ~ FRUIT' fruits.txt
APPLE,2
apple,3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.