2016-08-09 16 views
1

ログイン:正規表現は実行で始まり、で終わる:

runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 :: 

正規表現:

sed 's/run* ==>> [0-9]* //g' -i sample.log 

そのが働いていません。助けてください

Name ==>> Suresh :: Age ==>> 21 :: 

:私は、実行

の予想される出力で始まるすべての文字列を削除します。

+1

それは動作しません。より多くの「n」記号。あなたは '[^ =] *'を意味する必要があります。 –

答えて

1

n*が0以上nシンボルと一致するため、動作しません。 .*を使用すると、文字列をあま​​りにも多く削除できます。

私は(それが=以外のゼロ以上の文字にマッチします)[^=]**を交換使用することをお勧めしても周りのスペースで::を削除するために最後に*:: *を追加します。

sed 's/run[^=]* ==>> [0-9]* *:: *//g' 

this demoを参照してください。 .+?Nameはへと名前を含めて最大何を探し

sed -r 's/.+?Name/Name/g' 

0

は、次を使用することができます。次に、見つかったものすべてをNameと置き換えるだけで、以前の部品を効果的に取り除くことができます。

sedに渡されるオプション:

-r use extended regular expressions in the script 

例データ:

$ cat m 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> foo :: Age ==>> 20 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> bar :: Age ==>> 1 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> baz :: Age ==>> 0 :: 

出力例: `N *は` 0かと一致するため

$ cat m | sed -r 's/.+?Name/Name/g' 
Name ==>> Suresh :: Age ==>> 21 :: 
Name ==>> foo :: Age ==>> 20 :: 
Name ==>> bar :: Age ==>> 1 :: 
Name ==>> baz :: Age ==>> 0 :: 
関連する問題