我有一個日誌,我想在正則表達式匹配文本中應用替換。使用sed只替換正則表達式子字符串
實例,藉此日誌行:
date machine text random text and yet more random text - status code
我想Ø由_更換所有空間文本區域內,無需更換日誌中的所有其他空間。輸出會是這樣:
date machine text_random_text_and_yet_more_random_text - status code
要匹配我要替換的區域,我有這個正則表達式:
/machine \(.*\) -/
由於文字不規範,我可以有一個空間20,所以其很難直接匹配它,所以我匹配子字符串的開始和結束。
嘗試使用它我想這:
sed `/machine \(.*\) -/ s/ /_/g ' logfile
但當然,它會取代所有的空格在日誌中,而不僅僅是匹配的子字符串。
我設法使用awk做到這一點,通過迭代和打印每個字段,直到我找到machine
,在那裏我改變OFS="_"
,當我找到-
其恢復到空間。它的工作......但是,我很好奇,如果這是可以解決使用sed。
感謝
我不知道是什麼sed的支持時,它涉及少數 '高級' 正則表達式語法,但用PCRE,你可以像[那](http://regex101.com/r/sW0uM7)。 – Jerry
Sed沒有PCRE,但這是一個有趣的網站!謝謝! – higuita