2017-03-20 5 views
1

数字とコンマで構成されるパターンがあります。123,45,2,14324です。任意の桁数がありますが、2桁の間に桁数が何桁かあるかどうかわかりません。私は各桁を文字 'k'で置き換える必要があるので、129,54,0,111kkk,kk,k,kkkになります。その例のラインに変更する必要があり、私は直接mypattern:を次の各桁を置き換える必要があり mypattern:123,421,9,3 pattern_i_don't_need:1499,242,22,1sedは、パターンが出現するまで各文字を置換します。

:私は、特定のパターンが、その前に発生した場合にのみ、それを交換する必要があり、それは常にこのような行に表示されます:

mypattern:kkk,kkk,k,k pattern_i_don't_need:1499,242,22,1

私はSEDおよび/またはgrepを使用することができます。 は、これまでのところ私はこのように、問題の行に各文字を置換する方法を学びました:

sed '/^mypattern:/ s/[0-9]/k/g' 

このバージョンはmypattern:で始まり、その行の各桁を置き換える行を検索します。どのようにしてsedに '停止'と言えばいいですか?

+0

'mypattern:kkk、kkk、k、k pattern_i_don't_need:1499,242,22,1'は常に同じ行にありますか?それとも別の行に入れることができますか? – Inian

+0

はい、常に同じ行にあります。先行する文字がない場合は常に最初に 'mypattern 'です。次に、' k 'で置き換えなければならない数字とスペースと文字の量が固定されています(各行で異なる可能性があります)。カンマで数字を変更する必要はありません。それは単一行です。 – wouldnotliketo

答えて

2

あなたは、このようなsedコマンドを使用することができます:

を:

sed -r ':a s/(mypattern:[k,]*)[0-9]/\1k/; t a' yourfile 
  • :aはケースs中にジャンプt aラベルは、このようにあなたが「ループ」を持っている置換
  • を行っているあります

+0

テスト '/ mypattern:/' –

+0

@CasimiretHippolyteを削除することができます。そうです、 's'のmypatternで十分です。私は答えを簡潔にしました。 –

0

あなたがにAWKを使用することができます。

awk '/^mypattern/ && gsub(/[0-9]/,"k",$1)' file 

同じ概念だけでawkはあなたにホワイトスペースで区切られたデータの最初の列に取り組んでのオプションを提供します。

関連する問題