2016-05-10 16 views
1

等号の前にすべてのドット文字を置き換える必要がありますが、2つの条件が含まれているため、どのように処理するかわかりませんでした。sedを使用して複数の条件で文字を置き換える

lib.libraries=cache,common,myjar.jar,blablabla 

は右正規表現のためにhttp://regexr.com/に長い間遊ん

lib_libraries=cache,common,myjar.jar,blablablam 

が助けにはならなかったはずです。それは簡単なようですが、私は正規表現には全く新しいので、私はちょうどこれをクランチすることはできません。

編集:言及するのを忘れてしまった - 私はまた、これは動作するはずlib.libraries.library.etc=cache,common,myjar.jar,blablabla

答えて

0

はこれを試してみてください=まで、.はすべて_に置き換えてください。ここで

+0

'myjar_jar'?それはOPが望んでいるものではありません... – Jahid

+0

@Jahidあなたは正しいです。 – SLePort

+0

@Jahid私の答えを更新しました。 – SLePort

0

、すなわち、複数のドットseperatorsに対処する必要があります。

$ sed ":a;s/\.\([^=]*=\)/_\1/;ta" <<< "lib.libraries=cache,common,myjar.jar,blablabla" 
lib_libraries=cache,common,myjar.jar,blablabla 

$ sed ":a;s/\.\([^=]*=\)/_\1/;ta" <<< "other.lib.libraries=cache,common,myjar.jar,blablabla" 
other_lib_libraries=cache,common,myjar.jar,blablabla 

それは文字をループ:

sed 's/^\(.*\)\.\(.*=.*\)$/\1_\2/g' file 
+0

それは、 '='前に複数のドットでは動作しません動作します試してみてください。 – SLePort

+0

@Kenavoz:私はそれを編集しました。 gフラグを忘れて、今すぐに動くはずです。 – Jahid

0

は、単純なawk 1-ライナーです:

$ awk -F = '{gsub(/\./, "_", $1); print $1 "=" $2}' <<< "lib.libraries=cache,common,myjar.jar,blablabla" 
lib_libraries=cache,common,myjar.jar,blablabla 

はまた、複数のドットのために働く:

$ awk -F = '{gsub(/\./, "_", $1); print $1 "=" $2}' <<< "lib.libraries.pkg=cache,common,myjar.jar,blablabla" 
lib_libraries_pkg=cache,common,myjar.jar,blablabla 
0

これは、開始までの最後の(なぜなら、 "貪欲" マッチングの)ドットを置き換えます線と最初の符号は等しくなります。

sed 's/^\([^=]*\)\./\1_/' 
0

正規表現:(^(?:(?!=|\.).)*)\.((?:(?!=).)*(?=\=))
は交換してください:$1_$2
が、これは

関連する問題