iT邦幫忙

0

Regex正規表達式-反向匹配

  • 分享至 

  • xImage

圖一是Linux的登入Log現在要去掉有reboot的那行,如下圖二只顯示USER(giving )登入時間。但是小弟一直找不到對應的regex語法,有大大知道regex語法語法要怎下嗎?

PS: 這個需求就是列出登入者同時不要顯示Reboot(重開機)

圖一
# last | head -n 5
giving   pts/0        :0               Tue Mar 14 10:56   still logged in   
giving   :0           :0               Tue Mar 14 10:55   still logged in   
reboot   system boot  3.10.0-1160.25.1 Tue Mar 14 10:43 - 15:42  (04:58)    
giving   :0           :0               Tue Mar 14 10:11 - down   (00:32)    
reboot   system boot  3.10.0-1160.25.1 Fri Apr  1 11:49 - 10:43 (346+22:54)
圖二
# last | grep -v reboot | head -n 3
giving   pts/0        :0               Tue Mar 14 10:56   still logged in   
giving   :0           :0               Tue Mar 14 10:55   still logged in   
giving   :0           :0               Tue Mar 14 10:11 - down   (00:32)    

看更多先前的討論...收起先前的討論...
ccutmis iT邦高手 2 級 ‧ 2023-03-14 15:54:00 檢舉
建議先請ChatGPT順過句子再問...或直接問ChatGPT XD
kk999 iT邦新手 3 級 ‧ 2023-03-14 16:00:22 檢舉
建議先請ChatGPT順過句子再問 <------- 這倒是
kk999 iT邦新手 3 級 ‧ 2023-03-14 16:01:10 檢舉
或直接問ChatGPT XD <------- GPT 給的答案是錯的 我的GPT比較笨怎辦大大幫幫它XD
ccutmis iT邦高手 2 級 ‧ 2023-03-14 16:10:34 檢舉
哦我大概懂了 你的意思是說 現在你用 grep -v 'reboot' 排除掉有 reboot 那行,詢問改用 RegEXP 怎麼寫可以達到同樣結果嗎?
kk999 iT邦新手 3 級 ‧ 2023-03-14 16:15:44 檢舉
我修改一下內文
kk999 iT邦新手 3 級 ‧ 2023-03-14 16:17:31 檢舉
哦我大概懂了 你的意思是說 現在你用 grep -v 'reboot' 排除掉有 reboot 那行,詢問改用 RegEXP 怎麼寫可以達到同樣結果嗎? <------- YES
ccutmis iT邦高手 2 級 ‧ 2023-03-14 16:47:52 檢舉
我覺得這是沒什麼意義的,
就我的理解 grep 後面帶的字串就是 RegEXP 了 ,
多了一個 -v 讓它有 NOT 的功能算是補完 RegEXP 難處理不包含特定字串的缺點,因為它預設是逐個字元去比對的,舉個例 [^reboot] 並沒辦法排除掉 含reboot的那行,它只能排除字串裡面不包含r,e,b,o,t這些字元, 個人認為最佳解就是你原先寫的那個方式了,問過ChatGPT 它給的範例參考:
grep -E '([^r]|r[^e]|re[^b]|reb[^o]|rebo[^o]|reboo[^t])'

GPT : 意思是匹配行首非'r'的字符,或'r'後面非'e'的字符,或're'後面非'b'的字符,或'reb'後面非'o'的字符,或'rebo'後面非'o'的字符,或'reboo'後面非't'的字符。

使用這個正規表達式來過濾含有'reboot'的行,就可以得到同樣的結果。
kk999 iT邦新手 3 級 ‧ 2023-03-15 09:19:02 檢舉
1. 多了一個 -v 讓它有 NOT 的功能算是補完 RegEXP 難處理不包含特定字串的缺點,因為它預設是逐個字元去比對的 <------- 原來如此
2. grep -E '([^r]|r[^e]|re[^b]|reb[^o]|rebo[^o]|reboo[^t])' <------- 感謝大大花費時間幫我解決問題
ccutmis iT邦高手 2 級 ‧ 2023-03-15 11:10:12 檢舉
沒事,我自己也學到不少 :D
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
JamesDoge
iT邦高手 1 級 ‧ 2023-03-15 09:49:04

不需要使用正則表達式來達到你的需求

last | grep -v reboot | head -n 5

我要發表回答

立即登入回答