重定向/管道输出并设置环境变量

重定向/管道输出并设置环境变量

基本上,我有一个文件,如果使用 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
端局部

我通常不喜欢创建临时文件,但这是我想到的快速解决方案。

相关内容