2017-09-05 40 views
1

我有一個字符串「AAAAAAA02」,我想用「AAAAAAA01」替換它,即只是單獨編號。 我曾嘗試以下未工作sed命令:用於替換字符串中的數字的正則表達式

sed -e "s|AAAAAAA\\d+$|AAAAAAA01|g;" 
sed -E "s|(AAAAAAA.+)\d+|AAAAAAA01|g;" 
sed -E "s|(AAAAAAA.+)\\d+|AAAAAAA01|g;" 
sed -E "s|AAAAAAA(\\d+)|AAAAAAAD01|g;" 

基本上,我需要一個正則表達式,但如果有人能幫助我sed命令,那麼這將是偉大的!

編輯: 我知道這可以被替換爲硬編碼值說01/02。但是文件中有很多行,我想一般地替換它。 我需要一個正則表達式來清除它。

+1

最後的';'必須刪除。 '\ d'應該改成'[0-9]'。如果在正則表達式中使用了一個組,爲什麼不在替換部​​分中使用反向引用? –

+0

只是想知道,誰給了負面的問題,留下一個反饋如何改善。爲什麼和以什麼爲基礎,你認爲這個問題沒有用? – VIRA

+1

你的「不工作」聽起來不太清楚。通常,建議解釋究竟出了什麼問題,是否有任何錯誤消息等等。 –

回答

1

最後必須刪除;\d應改爲[0-9]。如果在正則表達式中使用了一個組,爲什麼不在替換部​​分中使用反向引用?

使用

s='AAAAAAA02' 
echo $s | sed -E "s|(A{7})[0-9]+|\101|g" 

看到一個online demo

-E該選項使POSIX ERE語法(不需要轉義(...)創建捕獲組和不需要轉義+{...}量詞)。

的模式匹配:

  • (A{7}) - 組1:7個A小號
  • [0-9]+ - 一個或多個數字

替換插入組1內的內容物(\1),並增加了值爲01

注:如果A...<digits>必須作爲一個整體詞相匹配,使用單詞邊界,\b,圓形圖案(sed -E "s|\b(A{7})[0-9]+\b|\101|g")。