基本上,我有一个文件,如果使用 grep 匹配 2 个正则表达式中的 1 个,我想用不同的颜色来标记其中的行。如果匹配 regexp1,则使用一种颜色;如果匹配 regexp2,则使用另一种颜色。
但是,grep 每次只使用一种颜色,因此我想要做的是将 grep 的输出通过管道传输到另一个具有不同颜色的 grep 语句中。
但是,grep 颜色由环境变量 GREP_COLOR 控制(该变量已被弃用,取而代之的是 GREP_COLORS,但是在 Windows 上无法使用,因此我改用 GREP_COLOR)
因此批处理文件看起来将会像这样:
@echo off
setlocal
set GREP_COLOR=06;32
echo GREEN RED OTHER | grep --color=always --line-buffered "GREEN" | grep --color=always -E "RED"
endlocal
我如何更改第二次 grep 调用的 GREP_COLOR?
我已经使用 2 个批处理文件来完成此操作,但必须有一种方法可以使用单个批处理文件来完成此操作:
ctest1.bat:
@echo off
setlocal
set GREP_COLOR=06;32
echo GREEN RED OTHER | grep --color=always --line-buffered "GREEN" | ctest2.bat
endlocal
ctest2.bat:
@echo off
setlocal
set GREP_COLOR=01;31
grep --color=always -E "RED"
endlocal
有什么想法吗?看起来应该很简单,但我浪费了整整 2 个小时试图将其制作成 1 个批处理文件,但没有成功。
答案1
看来临时文件解决方案应该可行。
就像是:
@echo 关闭 设置本地 设置 GREP_COLOR=06;32 echo 绿色 红色 其他 | grep --color=always "GREEN" > %temp%\color.tmp 设置 GREP_COLOR=01;31 grep --color = 始终“RED”%temp%\ color.tmp 删除 %temp%\color.tmp 端局部
我通常不喜欢创建临时文件,但这是我想到的快速解决方案。