2017-01-31 17 views
0

私は、IPアドレス、その後varaibleを含む複数の行を含むファイルを持っている.....検索ラインと新しい文字列を別の文字列を置換

例私は行くことができる方法

server 127.0.0.1:80 VARTOREPLACE 
server 127.1.0.1:80 VARTOREPLACE 
server 127.2.0.1:80 VARTOREPLACE 

.....ファイルを通って、特定の文字列にその行に一致するVARを設定し、IPパターンに一致するスキャニングについて例

  • IPが127.*.*.*と一致した場合にを交換NEWVAR1
  • IPはIPが一致した場合127.1.*.*NEWVAR2
  • VARTOREPLACEを置き換えると一致した場合と127.2.*.*NEWVAR3

VARTOREPLACEを置き換える私は

sed -i '/:127.0 /s/VARTOREPLACE/NEWVAR1/' file 

は任意の助けをいただければ幸いです試してみました。コマンド以下

+0

sed -i '/:127.0/s/VARTOREPLACE/NEWVAR1/'ファイル –

+0

@EricCoxは 'sed 'で試しています/127.0/s/VARTOREPLACE/NEWVAR1/; /127.1/s/VARTOREPLACE/NEWVAR2/; /127.2/s/VARTOREPLACE/NEWVAR3/ 'file' –

+0

'127.1。*。*'は '127。*。*。*'のサブセットです - それが適用される場合、より具体的な置き換えをしたいと思いますか? –

答えて

0

TRY -

sed '/127.0.0/s/VARTOREPLACE/NEWVAR1/g;/127.1.0/s/VARTOREPLACE/NEWVAR2/g;/127.2.0/s/VARTOREPLACE/NEWVAR3/g' 
server 127.0.0.1:80 NEWVAR1 
server 127.1.0.1:80 NEWVAR2 
server 127.2.0.1:80 NEWVAR3 
0

は、この単純なコマンドを試してみてください。

sed -i -e '/127.0/s/VARTOREPLACE/NEWVAR1/' file -e '/127.1/s/VARTOREPLACE/NEWVAR2/' file 

他の多くの変数がある場合、私はそれをお勧めしませんが。 あなたのための一種のvlookupを行う別のファイルが必要です

0

@Eric Cox:awkソリューションも試してみてください。

フィールドの第二の範囲のいずれかと等しい場合、条件がに関してTRUEの場合、(*あまりにも文字などが含まれていてもよいと[0-9]と*を変更する)あなたのポストにあなたによって提供にチェック
awk '$2 ~ /127.1.[0-9]+.[0-9]+/{$NF="NEWVAR2";print;next} $2 ~ /127.2.[0-9]+.[0-9]+/{$NF="NEWVAR3";print;next} $2 ~ /127.[0-9]+.[0-9]+.[0-9]+/{$NF="NEWVAR1";print;next}1' Input_file 

$ 2に変更し、$ NF(最後のフィールド)を "NEWVAR1"などの値に変更した後、新しくフォーマットされた行を印刷し、次のステートメントを置いてすべてのステートメントをスキップします。最終的には、条件のどれも一致しない場合に行を印刷するために1を言及すると、単に行を印刷します。

関連する問題