递归(嵌套)grep 给出“无效字符范围”错误

递归(嵌套)grep 给出“无效字符范围”错误

我有一个文件test.xml(如下所示)。这个 grep 的工作原理是:

grep '<appointment-id internal:ref=1.2.3/>' test.xml

输出是:

    <appointment-id internal:ref=1.2.3/>

但这失败了:

grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml

输出是:

grep: invalid character range

内容test.xml

<note>
    <to>Jim</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Some text</body>
    <appointment-id internal:ref=1.2.3/>
</note>

我已将这两个grep命令(简单命令和嵌套命令)放入带有set -x.这是该脚本的精确复制和粘贴:

set -x
grep '<appointment-id internal:ref=1.2.3/>' test.xml
grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml
exit 0

这是它的输出:

++ grep '<appointment-id internal:ref=1.2.3/>' test.xml
    <appointment-id internal:ref=1.2.3/>
+++ grep '<appointment-id internal:ref=1.2.3/>' test.xml
++ grep '    <appointment-id internal:ref=1.2.3/>' test.xml
grep: invalid character range
++ exit 0

答案1

grep即使输出不是终端,您的(内部)也会产生彩色输出。当GREP_COLOR环境变量设置为时,它可能会这样做always

进行着色的控制代码包含的字符,当您将它们输入到外部时grep,将被解释为字符范围。

当解释为字符范围时,该模式无效。

grep解决方案是通过显式使用--color=never或设置适当的环境变量 ( )来禁用 输出的着色GREP_COLOR=never

如果您设置GREP_COLOR=auto,grep应该只在写入终端时产生彩色输出,就像grep示例中的outer 的情况,但不是inner 的情况grep

相关内容