Board logo

标题: sed 的d命令在批处理中出错一例,不知道哪里错了 [打印本页]

作者: 踏沙行    时间: 2018-12-15 13:24     标题: sed 的d命令在批处理中出错一例,不知道哪里错了

【要求】将2.txt中的属于注册表键的行保留,其它行删除。

2.txt内容如下:
  1. 搜索结束: 找到 0 匹配。
  2. 搜索结束: 找到 0 匹配。
  3. 搜索结束: 找到 0 匹配。
  4. 搜索结束: 找到 0 匹配。
  5. 搜索结束: 找到 0 匹配。
  6. 搜索结束: 找到 0 匹配。
  7. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\OfficeScanNT
  8. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\tmeevw\Parameters\Sentry\Products\OfficeScan
  9. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\tmusa\Parameters\Sentry\Products\OfficeScan
  10. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\tmeevw\Parameters\Sentry\Products\OfficeScan
  11. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\tmusa\Parameters\Sentry\Products\OfficeScan
  12. 搜索结束: 找到 5 匹配。
  13. 搜索结束: 找到 0 匹配。
  14. HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro
  15. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TrendMicro
  16. 搜索结束: 找到 2 匹配。
  17. 搜索结束: 找到 0 匹配。
  18. 搜索结束: 找到 0 匹配。
  19. 搜索结束: 找到 0 匹配。
  20. 搜索结束: 找到 0 匹配。
  21. 搜索结束: 找到 0 匹配。
  22. 搜索结束: 找到 0 匹配。
复制代码
bat代码如下:
  1. type 2.txt|sed "/^HKEY_/!d">1.txt
复制代码
结果,运行bat后,得到的结果中,只有“搜索结束:找到N匹配”的行,而不是需要的结果
但是直接在cmd窗口测试,则能返回正确结果。

目前,只能在bat中使用type 2.txt|sed -n "/^HKEY_/p">1.txt,可以实现预定效果

【疑惑】为什么在批处理中使用!d得到的结果不正确,而在cmd中正确呢?
说明:操作系统为windows7 64位,sed.exe版本为4.4,是从http://www.bathome.net/s/tool/index.html下载的
作者: 0000    时间: 2018-12-15 14:56

本帖最后由 0000 于 2018-12-15 14:58 编辑

在批处理中是否有一行:

      setlocal enabledelayedexpansion


如果有,多加个 ^


      type 2.txt|sed "/^HKEY_/^!d">1.txt




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2