[英]GREP single integer instead the whole similar numbers
我需要正則表達式的幫助來grep一個整數。
假設我在文本文件中有這些行。
dm-7 14f504e46494c455267494e5a4e642d516a31562d644f394c
dm-70 14f504e46494c455267494e5a4e642d516a31562d644f395c
dm-71 14f504e46494c455267494e5a4e642d516a31562d644f394d
dm-72 14f504e46494c455267494e5a4e642d516a31562d644f394e
我只想在不打印dm-70,dm-71,dm-72和UUID的情況下grep“ dm-7”。 我該如何實現?
grep "^dm-7$"
不會返回任何東西。
謝謝。
使用-w
匹配確切的單詞:
$ grep -w 'dm-7' file
dm-7 14f504e46494c455267494e5a4e642d516a31562d644f394c
您還可以使用grep -w '^dm-7' file
,如果你想確保它開始( ^
)字dm-7
來自man grep
:
-w ,--word-regexp
僅選擇包含構成整個單詞的匹配項的行。 測試是匹配的子字符串必須在該行的開頭,或者必須在非單詞組成字符之前。 同樣,它必須在行的末尾,或后跟非單詞組成字符。 單詞組成的字符是字母,數字和下划線。
或也用awk
:
$ awk '$1=="dm-7"' file
dm-7 14f504e46494c455267494e5a4e642d516a31562d644f394c
甚至使用sed
:
$ sed -n '/^dm-7\s/p' file
dm-7 14f504e46494c455267494e5a4e642d516a31562d644f394c
嘗試:
grep '^dm-7 '
^---note this space
$
因為您正在使用它是換行符的“行尾”,這意味着您將尋找任何dm-7
,這是唯一的東西。
只需在數字7之后使用單詞邊界\\b
。
grep -P "^dm-7\b" file
您也可以使用單詞邊界正則表達式
grep -oP '^dm-7\b' << EOF
dm-7 14f504e46494c455267494e5a4e642d516a31562d644f394c
dm-70 14f504e46494c455267494e5a4e642d516a31562d644f395c
dm-71 14f504e46494c455267494e5a4e642d516a31562d644f394d
dm-72 14f504e46494c455267494e5a4e642d516a31562d644f394e
EOF
將僅打印dm-7
不打印其余行。
dm-7
但是, 您可能想要獲取給定行的hash
,因此您可以執行以下操作:
word="dm-7"
hash=$(grep -oP "^$word\s+\K(.*)" $filename)
echo "$hash"
版畫
14f504e46494c455267494e5a4e642d516a31562d644f394c
如果只是整行,請從-oP
刪除o
,例如:
grep -P '^dm-7\b' << EOF
dm-7 14f504e46494c455267494e5a4e642d516a31562d644f394c
dm-70 14f504e46494c455267494e5a4e642d516a31562d644f395c
dm-71 14f504e46494c455267494e5a4e642d516a31562d644f394d
dm-72 14f504e46494c455267494e5a4e642d516a31562d644f394e
EOF
印刷品:
dm-7 14f504e46494c455267494e5a4e642d516a31562d644f394c
您將需要匹配0-9或字符串$結尾的任何內容
grep "^dm-7([^0-9]|$)"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.