Jim*_*Jim -1 osx grep regular-expression
我有一个文件test.xml
(如下所示)。这个grep有效:
grep '<appointment-id internal:ref=1.2.3/>' test.xml
Run Code Online (Sandbox Code Playgroud)
输出是:
<appointment-id internal:ref=1.2.3/>
Run Code Online (Sandbox Code Playgroud)
但这失败了:
grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml
Run Code Online (Sandbox Code Playgroud)
输出是:
grep: invalid character range
Run Code Online (Sandbox Code Playgroud)
内容test.xml
:
<note>
<to>Jim</to>
<from>John</from>
<heading>Reminder</heading>
<body>Some text</body>
<appointment-id internal:ref=1.2.3/>
</note>
Run Code Online (Sandbox Code Playgroud)
我已将两个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
Run Code Online (Sandbox Code Playgroud)
这是它的输出:
++ 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
Run Code Online (Sandbox Code Playgroud)
grep
即使输出不是终端,您的(内部)也会产生彩色输出。当GREP_COLOR
环境变量设置为always
.
进行着色的控制代码包含字符,当您将它们输入到外部时grep
,这些字符会被解释为字符范围。
当解释为字符范围时,模式无效。
解决方案是grep
通过显式使用--color=never
或设置适当的环境变量 ( GREP_COLOR=never
)来禁用 输出的着色。
如果您设置GREP_COLOR=auto
,grep
应该只在写入终端时产生彩色输出,就像grep
您的示例中的外部情况一样,而不是内部grep
。