2015-01-17 68 views
0

有誰知道我怎麼才能最好在此聲明合併兩個sed命令:合併2個正則表達式 - 得到一個連字符的字符串的第一個字符

$ echo "Apple-Boy-Cat" | sed 's/\B.//g;' | sed 's/-//g' 
ABC 

以上工作正常,但我有一種揮之不去的感覺,我忘記了一些可以避免我運行兩個單獨的sed語句的東西。

我曾試圖做sed 's/\B.//g;y/-//'但我得到一個未終止的y命令的錯誤。

+0

試試'sed's/\ B。// g; s/- // g'file' –

回答

2

您可以使用正則表達式替換運算符\|

$ echo "Apple-Boy-Cat" | sed 's/\B.\|-//g' 
ABC 

注意\B兩個字字符或兩個非單詞字符之間的匹配。它與\b,其在字詞字符與非字詞字符之間匹配)相反。

+0

也可以用'-'來代替'''':'echo'Apple'男孩 - 貓「| sed -r's/\ B. | - // g''(不是很大的區別,但對我而言至少比較容易閱讀)。 – Fernando

+0

,但也考慮只有基本sed的系統。這個解決方案適用於任何種類的sed。 –

+0

最後你不需要';',因爲你只有一個命令,所以:'echo「Apple-Boy-Cat」| sed's/\ B. \ | - // g'' – Jotne

1

這不是sed,而是展示瞭如何使用awk得到相同的結果:

echo "Apple-Boy-Cat" | awk -F- '{for (i=1;i<=NF;i++) printf substr($i,1,1);print ""}' 
ABC 

它通過-分割字符串,然後打印每個單詞的第一個字母。

相關問題