2017-02-27 7 views
0

おはよう。perlコマンドで変更後の奇妙な文字

は私のファイルの内容は以下のように言ってみましょう::

java ${AGENT_JAVAOPTS} -Xmx2560m com.xxx.xxx.xxx.AgentXX -inifile ${XXX_AGENT_INI} -queues winall,dustat,envstat,netstat,iostat,winconfig,netwarestat,netwareconfig,pawmin,paw15,db2,sqlserver,vmstatvmw2,vmstatvm2,netstatvm,netstatvmw,vmstatvm,vmstatvmw,iostatvm,iostatvmw,envstatvm,envstatvmw,vmscpu,vmsdisk,vmsmem,vmstatvcw,process,winprocess -log xxx0202.'$DotDate'.log -AgentName xxx0202 

そこで、私は "winall、プロセス、WinConfigの、vmscpu、vmstatの、dustat" に '-queue' の後の文字列を変更しようと、どの私はしかし、それは以下のように奇妙な文字で出力を生成

UNIXでのコマンドの下に
perl -pi -e 'tr/winall,dustat,envstat,netstat,iostat,winconfig,netwarestat,netwareconfig,pawmin,paw15,db2,sqlserver,vmstatvmw2,vmstatvm2,netstatvm,netstatvmw,vmstatvm,vmstatvmw,iostatvm,iostatvmw,envstatvm,envstatvmw,vmscpu,vmsdisk,vmsmem,vmstatvcw,process,winprocess/winall,process,winconfig,vmscpu,vmstat,dustat/' file 

を使用して:: ::

jaia ${AGENT_JAVAOPTS} -Xtxtt60t u,t.itt.ott.cotau,.At,ncDP -iniail, ${SRM_AGENT_INI} -tr,r,o winall,procac,,niocac,n,cocac,i,ocac,winu,nait,n,cwat,ocac,n,cwat,u,nait,tawtin,tawtt,ptt,otlo,ti,t,itocacitwt,itocacitt,n,cocacit,n,cocacitw,itocacit,itocacitw,i,ocacit,i,ocacitw,,niocacit,,niocacitw,itoutr,itopiot,itot,t,itocaciuw,tt,u,oo,wintt,u,oo -l,t tlp0t0t.'$D,cDac,'.l,t -At,ncNat, tlp0t0t 

どのようにして上記のような出力が得られますか?この問題のための支援が必要

java ${AGENT_JAVAOPTS} -Xmx2560m com.xxx.xxx.xxx.AgentXX -inifile ${XXX_AGENT_INI} -queues winall,process,winconfig,vmscpu,vmstat,dustat -log xxx0202.'$DotDate'.log -AgentName xxx0202 

出力はのように仮定します。ここ

+1

次の回答のいずれかが目標に役立った場合は、回答以外に右の記号を打つことで、閉鎖の回答を受け入れてください。 –

答えて

2

tr///は、置換ではなく、音訳です。

SEARCHLISTの最初の文字をREPLACEMENTLIST(y///に似ています)の最初の文字で置き換えます(sedなど)。あなたが必要とするものは、置換s///です。詳細は、perlopを参照してください。

+0

ありがとう@choroba、それは助けます=) – MrAZ

1
sed -r 's/(^.*-queues)(.*)/\1 winall,process,winconfig,vmscpu,vmstat,dustat/' inputfile 
java ${AGENT_JAVAOPTS} -Xmx2560m com.xxx.xxx.xxx.AgentXX -inifile ${XXX_AGENT_INI} -queues winall,process,winconfig,vmscpu,vmstat,dustat 

、ラインがbackrefrencingを使用して2つのチャンクに分割され、第1の-queuesまで開始からのものであり、第2は、その時点から最後までです。

または、awkを使用すると、テキストを変数に格納し、置き換えて使用することができます。変数varの値を変更して、テキストを変更することができます。

awk -v FS='-queues' -v var='winall,process,winconfig,vmscpu,vmstat,dustat' '{print $1 FS var}' inputfile 
+0

このsedコマンドをお寄せいただきありがとうございます...しかし、その後の文字列は-log xxx0202です。 '$ DotDate'.log -AgentName xxx0202はこのコマンドを実行すると消えます。 – MrAZ

+0

@Azizul、部分入力のみを提供しているコマンドでは、必要に応じて '\ 1'の後にテキストを更新する必要があります。 –

+0

ありがとう、それは助けます=) – MrAZ