我想將以下jdk-1.6.0_30-fcs.x86_64
分割爲jdk-1.6.0_30
。我嘗試了以下sed 's/\([a-z][^fcs]*\).*/\1/'
但我最終與jdk-1.6.0_30-
。我認爲這是錯誤的方式,是否有辦法從單詞的結尾開始並向後遍歷,直到我遇到-
?無法找出正則表達式bash或sed或awk
0
A
回答
1
測試
不完全是,但您可以將模式錨定到字符串w的末尾$
。然後你只需要確保你重複字符可能不包括連字符:
echo jdk-1.6.0_30-fcs.x86_64 | sed 's/-[^-]*$//'
這將匹配從-
到字符串的結尾,但兩者之間的所有字符必須是不同-
(使它與第一個連字符不匹配)。
稍微更詳細的解釋。引擎首先嚐試匹配文字-
。這將首先在字符串中的第一個-
工作(顯然)。然後[^-]*
儘可能與非-
個字符匹配,因此它將消耗1.6.0_30
(因爲下一個字符實際上是連字符)。現在引擎會嘗試匹配$
,但這不起作用,因爲我們不在字符串的末尾。發生一些回溯,但我們可以在這裏忽略。最後,引擎將放棄匹配第一個-
並繼續穿過字符串。然後引擎將匹配文字-
與第二個-
。現在[^-]*
將消耗fcs.x86_64
。現在我們實際上是在字符串的末尾並且$
會匹配,所以完全匹配(將被刪除的是)-fcs.x86_64
。
1
1
使用cut
>>
echo 'jdk-1.6.0_30-fcs.x86_64' | cut -d- -f-2
相關問題
- 1. awk,sed或vim正則表達式
- 2. Sed - 從正則表達式到(正則表達式或eof)
- 3. awk或者sed正則表達式,停止分號
- 4. sed的(或AWK)的正則表達式來替代匹配
- 5. BASH - 否則,正則表達式或OR
- 6. 在AWK或SED中找到帶正則表達式的字符串
- 7. 正則表達式無法捕獲或
- 8. 將正則表達式轉換爲sed或grep正則表達式
- 9. 正則表達式找到「../」或「./」
- 10. 正則表達式查找int或雙
- 11. 如何在Awk或Sed中將數學與正則表達式混合使用?
- 12. awk的SED或正則表達式插入子和變化情況
- 13. 正則表達式「或」表達式
- 14. 或正則表達式?
- 15. 或正則表達式
- 16. 正則表達式或Python
- 17. IfElse或正則表達式
- 18. SED正則表達式:字符串或正斜槓
- 19. 正則表達式的sed
- 20. 正則表達式 - Sed
- 21. SED JSON正則表達式
- 22. Sed正則表達式?
- 23. sed正則表達式
- 24. sed和正則表達式
- 25. 正則表達式的sed
- 26. SED與正則表達式
- 27. awk正則表達式
- 28. 用awk正則表達式
- 29. 匹配算法或正則表達式?
- 30. bash腳本:SED/AWK /正則表達式匹配的IP地址和替換
仍然有點困惑,所以第一個'-'包含'-',那麼'[]'排除'-'和之後的任何東西?所以如果有3個'''那麼這會打印所有的前2個? – noMAD
@noMAD編號'-'匹配連字符。 '[^ - ]'匹配非連字符。 '*'需要零個或更多的那些。和'$'匹配字符串的末尾。這隻能匹配上一個'-'到字符串末尾的字符串。否則會在匹配的字符串和字符串的末尾之間出現另一個'-',所以'[^ - ] *'無法到達字符串的末尾,並且'$'不匹配。這有任何意義嗎? –
謝謝你,沒有道理:) – noMAD