shell脚本-替换数组中的变量

shell脚本-替换数组中的变量,shell,replace,Shell,Replace,脚本产生以下输出: 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 : C

脚本产生以下输出:

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
您可以使用sed-f:

如果您发现使用sed表达式准备映射文件很麻烦,您可以使用任意格式并使用附加的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
$ 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