2017-01-17 8 views
0

testfile.txtには次の内容があります。コマンドライン出力は、希望の場所で更新する必要があります

[client] 

clientName = 

[servername] 

targetUri = contact support team 

ファイルがclientName =行の末尾にhostname -sの出力で更新されるはずですし、example.com「は、コンタクトサポートチーム」を除去することにより、targetUri =の終了時に更新されなければなりません。

答えて

0

@Sai、以下試してください。

awk -vHOST=$(hostname -s) '/clientName =/{print $0 FS HOST;;next} /targetUri/{gsub(/contact support team/,HOST,$0);print;next} 1' Input_file > temp_file && mv temp_file Input_file 

だからここに私はクライアント名を代入しています=それが(接触サポートチーム)と一緒に値ボックスの名前だと文字列の私はこれを一時ファイルに入れて、実際のInput_fileに一時ファイルの名前を変更しています。

編集: OPのコードに従って少しコードを変更します。

awk -vHOST=$(hostname -s) '/clientName =/{$0=$0 FS HOST;print;next} /targetUri/{gsub(/contact support team/,"example.com",$0);print;next} 1' Input_file > temp_file && mv temp_file Input_file 

EDIT2: @Sai、親切に以下を経ます。

awk -vHOST=$(hostname -s) #### creating a variable named HOST whose value is command's hostname -s's value. 
'/clientName =/    #### searching for string clientName = in every line and if this string found then do following. 
{print $0 FS HOST   #### printing the value of current line along with the FS field separator with value of HOST variable here. 
;next}      #### putting next here for skipping all further statements here. 
/targetUri/     #### search for string targetUri for every line and if string found in any line then do following. 
{gsub(/contact support team/,"example.com",$0); #### substitute the value of string (contact support team) to "example.com" in that line then. 
print;           #### print the newly formed line(which as example.com value in it). 
next            #### using next keyword I am requesting awk not to proceed with further statements now. 
} 1'       #### awk works on condition{action} method, so if any condition is TRUE then action following it should work 
            so by putting 1 I am making condition as TRUE and not mentioning any action so by default action print will happen. 
Input_file > temp_file  #### put all the processed output into temp_file file. 
&& mv temp_file Input_file #### &&(if previous awk command ran successfully then do this command) rename temp_file to Input_file now. 
+0

これはclientNameの更新でのみ機能しましたが、 "contact support team"をexample.comに置き換えることはできませんでした。 – Sai

+0

@Sai:コードを変更しました。親切に見てください。 – RavinderSingh13

+0

ありがとう!期待通りに機能しました。 – Sai

1

このonelinerを試してみてください。

sed "/^clientName\b/{s/=.*/= $(hostname -s)/};/^targetUri\b/{s/=.*/= example.com/}" file 
+0

ありがとうございました!それはうまくいきましたが、これはどのように "\ b/{s /=.*/="の代用として機能するのか説明できますか?また、これはAwkコマンドを使用して達成できますか? – Sai

+0

@Sai、私の命令を試してみてください、これがあなたに役立つかどうか教えてください。 – RavinderSingh13

+0

@Saiはいできます。しかしあなたは 'sedとawk'でタグ付けしました。要するに:それは行を見つけ、 '= ..... 'を新しい値に置き換えます。 – Kent

関連する問題