我有一组看起来像这样的词:
fruits.txt
APPLE,2
apple,3
APPLE-ORANGE,3
APPLEORANGE-GRAPE,5
并尝试打印" apples"仅
这是我尝试过的,几乎所有具有类似问题的命令都返回相同的输出如下:
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 "-"
上建议我不能在循环中使用此功能以防止greping" APPLE-ORANGE"再次使用它#l}< lll是个问题。
答案 0 :(得分:2)
尝试:
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
任何字符或-
后面没有的内容。
答案 1 :(得分:2)
您可以使用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