[英]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.