2014-04-23 43 views
1

變量A腳本產生以下輸出:外殼腳本 - 取代來自陣列

MyProgram down : Computer7 Network 31 N_ID 1 at : 11-Apr-2014 14:56:06.22 
MyProgram up : Computer7 Network 31 N_ID 1 at : 11-Apr-2014 14:57:06.22 
MyProgram down : Computer7 Network 32 N_ID 1 at : 11-Apr-2014 14:57:06.40 
MyProgram down : Computer8 Network 32 N_ID 2 at : 11-Apr-2014 14:57:06.40 
MyProgram up : Computer7 Network 32 N_ID 1 at : 11-Apr-2014 14:57:06.43 
MyProgram up : Computer8 Network 32 N_ID 2 at : 11-Apr-2014 14:57:06.43 
MyProgram down : Computer8 Network 19 N_ID 2 at : 12-Apr-2014 01:59:28.46 
MyProgram up : Computer8 Network 19 N_ID 2 at : 12-Apr-2014 01:59:29.46 

然而,我需要間歇更換某些字符串,例如

Computer7 Network 31 = 'Harbor1' 
Computer7 Network 32 = 'Matrix7' 
Computer8 Network 19 = 'Romulos1' 
Computer8 Network 32 = 'Synergy20' 
... 

什麼是簡短高效的解決方案來實現以下輸出?

MyProgram down : Harbor1 N_ID 1 at : 11-Apr-2014 14:56:06.22 
MyProgram up : Harbor1 N_ID 1 at : 11-Apr-2014 14:57:06.22 
MyProgram down : Matrix7 N_ID 1 at : 11-Apr-2014 14:57:06.40 
MyProgram down : Synergy20 N_ID 2 at : 11-Apr-2014 14:57:06.40 
MyProgram up : Matrix7 N_ID 1 at : 11-Apr-2014 14:57:06.43 
MyProgram up : Synergy20 N_ID 2 at : 11-Apr-2014 14:57:06.43 
MyProgram down : Romulos1 N_ID 2 at : 12-Apr-2014 01:59:28.46 
MyProgram up : Romulos1 N_ID 2 at : 12-Apr-2014 01:59:29.46 

繪製新的輸出後,我怎麼能組相同的程序像下/上事件:

MyProgram down/up : Harbor1 N_ID 1 Down 14:56:06.22 - Up 14:57:06.22 on 11-Apr-2014 
MyProgram down/up : Matrix7 N_ID 1 Down 14:57:06.40 - Up 14:57:06.43 on 11-Apr-2014 
MyProgram down/up : Synergy20 N_ID 2 Down 14:57:06.40 - Up 14:57:06.43 on 11-Apr-2014 
MyProgram down/up : Romulos1 N_ID 2 Down 01:59:28.46 - Up 01:59:29.46 on 12-Apr-2014 

回答

0

您可以使用sed -f

$ cat mappings 
s/Computer7 Network 31/Harbor1/ 
s/Computer7 Network 32/Matrix7/ 
s/Computer8 Network 19/Romulos1/ 
s/Computer8 Network 32/Synergy20/ 

$ sed -f mappings file 
MyProgram down : Harbor1 N_ID 1 at : 11-Apr-2014 14:56:06.22 
MyProgram up : Harbor1 N_ID 1 at : 11-Apr-2014 14:57:06.22 
MyProgram down : Matrix7 N_ID 1 at : 11-Apr-2014 14:57:06.40 
MyProgram down : Synergy20 N_ID 2 at : 11-Apr-2014 14:57:06.40 
MyProgram up : Matrix7 N_ID 1 at : 11-Apr-2014 14:57:06.43 
MyProgram up : Synergy20 N_ID 2 at : 11-Apr-2014 14:57:06.43 
MyProgram down : Romulos1 N_ID 2 at : 12-Apr-2014 01:59:28.46 
MyProgram up : Romulos1 N_ID 2 at : 12-Apr-2014 01:59:29.46 

如果您發現準備映射文件與sed表達式繁瑣,您可以使用任意格式並使用額外的sedprocess substitution來準備輸入對於-f,例如:

$ cat mappings 
Computer7 Network 31=Harbor1 
Computer7 Network 32=Matrix7 
Computer8 Network 19=Romulos1 
Computer8 Network 32=Synergy20 

$ sed -f <(sed 's#\(.*\)=\(.*\)#s/\1/\2/#g' mappings) file 
MyProgram down : Harbor1 N_ID 1 at : 11-Apr-2014 14:56:06.22 
MyProgram up : Harbor1 N_ID 1 at : 11-Apr-2014 14:57:06.22 
MyProgram down : Matrix7 N_ID 1 at : 11-Apr-2014 14:57:06.40 
MyProgram down : Synergy20 N_ID 2 at : 11-Apr-2014 14:57:06.40 
MyProgram up : Matrix7 N_ID 1 at : 11-Apr-2014 14:57:06.43 
MyProgram up : Synergy20 N_ID 2 at : 11-Apr-2014 14:57:06.43 
MyProgram down : Romulos1 N_ID 2 at : 12-Apr-2014 01:59:28.46 
MyProgram up : Romulos1 N_ID 2 at : 12-Apr-2014 01:59:29.46