簡體   English   中英

精確匹配/子字符串

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM