LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 940|回复: 2

帮忙优化一下sed命令

[复制链接]
发表于 2007-12-31 17:58:31 | 显示全部楼层 |阅读模式
同学在Windows 下每次安装ANSYS都要进行很多烦琐的操作。我尝试着写了一个批处理脚本。

下面是我写的脚本,也感觉非常复杂。不知道可否进行简化。谢谢。

(1)修改ansys.dat文件首行,格式为 SERVER  计算机名  MAC  1055
因此,需要提取计算机名、MAC,然后进行替换。我的操作如下:
[PHP]
echo SERVER >tempfile  
ipconfig /all |sed -n "/Host Name/p"|sed "s/-//g"|sed "s/.*: \(.*\)/\1/g" >>tempfile %提取计算机名追加到tempfile文件
ipconfig /all |sed -n "/Physical Address/p"|sed "s/-//g"|sed "s/.*: \(.*\)/\1/g" >>tempfile %提取MAC地址追加到tempfile
echo 1055 >>tempfile
sed -i "N;N;N;s/\n/ /g" tempfile %将隔行合并为一会,中间用空格间隔
sed "1d" ansys.dat>>tempfile  %删除ansys.dat文件首行后,追加到tempfile文件
[/PHP]
这样,tempfile 便修改成功了。

(2)创建注册表文件
ANSYSLMD_LICENSE_FILE = 1055@host  (host being your computer name)
注册表格式为:
[PHP]Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Environment]
"ANSYSLMD_LICENSE_FILE"="1055@7dc06eb379da4e1"[/PHP]

由于无法使用 echo ">tempfile 命令将"追加到tempfile,先用-代替",然后再用sed替换回来。


[PHP]
echo Windows Registry Editor Version 5.00 >tempfile
echo [HKEY_CURRENT_USER\Environment] >>tempfile
echo -ANSYSLMD_LICENSE_FILE- = -1055@ >temp
ipconfig /all |sed -n "/Host Name/p"|sed "s/-//g"|sed "s/.*: \(.*\)/\1/g" >>temp
echo - >>temp
sed -i "s/-/\"/g" temp
sed -i -e "2N" -e "s/\n//" temp
sed -i -e "N" -e "s/\n//" temp
sed -i "s/ //g" temp
type temp>>tempfile
[/PHP]
发表于 2008-1-5 02:19:45 | 显示全部楼层
sed 命令不需要优化,需要优化你的批处理脚本。

如果是WinXP的系统,整个过程不需要sed。
  1. @echo off & Setlocal EnableDelayedExpansion

  2. rem get mac address from the output of command GETMAC;
  3. for /f %%a in ('getmac /nh') do set mac=%%a

  4. echo SERVER %ComputerName% %mac% 1055>tempfile
  5. (for /f "delims=: tokens=1*" %%a in ('findstr /n .* ansys.dat') do (
  6.     if %%a geq 2 echo\%%b
  7. ))>>tempfile
  8. start notepad tempfile
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-5 16:45:04 | 显示全部楼层
谢谢楼上的!
再加上下面一句,去掉mac中的-,就是我需要的了 :Coffee:
set mac=%mac:-=%
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表