2017-08-17 17 views
0

私は大腸などで最初の3の前に発生するハイフンを置き換えるために探しています、次の検索と同じパターンの複数の出現箇所を置き換える

word-3.4.4-r0-20170804_101145 
second-example-3.4.4-r0-20170804_101145 
and-third-example-3.4.4-r0-20170804_101145 

を交換したいです

word:3.4.4-r0-20170804_101145 
second-example:3.4.4-r0-20170804_101145 
and-third-example:3.4.4-r0-20170804_101145 

これまでのところ、私が得ることができる最も近い

newvar=$(echo "$var" | sed 's/-[0-9]/:/') 

ですが、このソリューションは置き換え-3で:

word:.4.4-r0-20170804_101145 
second-example:.4.4-r0-20170804_101145 
and-third-example:.4.4-r0-20170804_101145 

答えて

0

あなたはほぼそこにいます。

newvar=$(sed 's/-\([0-9]\)/:\1/' <<< "$var") 

結果::ただの数字を保持するために撮影しグループを使用

echo "$newvar" 
word:3.4.4-r0-20170804_101145 
second-example:3.4.4-r0-20170804_101145 
and-third-example:3.4.4-r0-20170804_101145 
+0

私は3つのソリューションをチェックしており、それらはすべて動作します。私はWiktorの解答の説明が好きです。それは私が学ぶことのできるものです。私はローマの答えをジョンのものに受け入れていますが、それは私が元々持っていたものに最も近いものですが、本当にそれらの間で選択するものはありません。私は近くにいると思った!あなたの助けをありがとう、私はそれを感謝します。 – Lar

+0

@Lar、歓迎、学習を続ける – RomanPerekhrest

0

あなたは

sed 's/^\([^0-9-]*\(-[^0-9-]*\)*\)-\([0-9]\)/\1:\3/' 

参照を使用することができますonline demo

詳細

  • ^ - グループ1 - ライン
  • \([^0-9-]*\(-[^0-9-]*\)*\)の開始:
    • [^0-9-]* - 任意の0+数字以外の文字と-
    • \(-[^0-9-]*\)* - (グループ2)-の0+シーケンスと、数字以外の0以上の文字と-
  • -から
  • \([0-9]\)ハイフン - グループ3

\1グループ1コンテンツに後方参照と\3グループ3内容に後方参照です。

0
newvar=$(echo "$var" | sed -r 's/-([0-9])/:\1/') 

他の回答に非常に類似したが、私はsedのために-rオプションを使用することを好む、これは構築することができますsed解析する文字数が少なくて済むため、読みやすい文字列です。他の答えと同様に、数字は([0-9])で取り込まれ、\ 1に置き換えられます。

関連する問題