2016-04-11 28 views
0

fw["fw.に置き換えます。検索と置換 - bash

私はsedコマンドのカップルを試しましたが、問題を解決できませんでした。

私はcutコマンド、trsedコマンドを試しました。しかし、私が置き換えたい文字は特殊文字なので、多くのエラーが出ます。

これは私の入力です:

endpoint.os.version="Windows 10" 
endpoint.fw["MSWindowsFW"].version="10.0" 
endpoint.av["AlwilAV"].version="11.1.2253" 
endpoint.os.hotfix["KB3116278"]="true" 

これは私が欲しい出力されます:

endpoint.os.version="Windows 10" 
endpoint.fw.MSWindowsFW.version="10.0" 
endpoint.av["AlwilAV"].version="11.1.2253" 
endpoint.os.hotfix["KB3116278"]="true" 

あなたは、このような変換を書くために私を助けることができますか? file.txtと仮定すると

+1

どのような入力を扱っていますか?ストリーム? 1つまたは複数のファイル?変数?短いヒント:エスケープ(ie: 'echo 'fw ["' | tr -d '["'') – bufh

+0

こんにちは!それはただ1つのファイルが4行(入力)を持っています – Bala

答えて

1

perl -pe 's/fw\["(.*?)"\]/fw.\1/g' file.txt 

またはsedは純粋で:

sed 's/fw\["\([^"]*\)"\]/fw.\1/g' file.txt 

注:POSIX regular expressions are greedyとして

endpoint.os.version="Windows 10" enter code here 
endpoint.fw["MSWindowsFW"].version="10.0" enter code here 
endpoint.av["AlwilAV"].version="11.1.2253" enter code here 
endpoint.os.hotfix["KB3116278"]="true" enter code here 

、あなたはPerlで、このようにそれを行うことができ、私はあなたをお勧めしますhttps://regex101.com/またはhttps://www.debuggex.com/を使用してテストし、視覚化してあなたの正規表現がやっていること。

それ以外の場合は、シェルが解釈する「特殊文字」を避けてください。私の例では、それらを一重引用符で囲みますが、あなたはそれらをエスケープすることができます(つまり、tr -d \[\"tr -d '["'に相当)。

+0

私を助けていただきありがとうございます。それは私の問題を解決しますが、それはすべての ""と置き換えられます。私は非常に具体的にfw ["fw"に置き換えたいと思います。それ以外はそのまま残す – Bala

+0

編集済み...あなたのニーズに今適合していますか? – bufh

+0

確かに。私は必要なものを手に入れました。速くて最高の反応をありがとう。 – Bala