【问题标题】:tcl, grep and the greater than signtcl、grep 和大于号
【发布时间】:2014-03-11 22:16:45
【问题描述】:

我正在尝试在 tcl 中查找包含大于号的字符串。 到目前为止我尝试了什么:

grep -orI -- {\> somestring} dir

但这似乎不起作用。

然后我试着只寻找大于号:

grep -orI -- \> dir

那没用..

【问题讨论】:

  • grep 不是 Tcl 命令。因此,这必须是程序中 exec 语句或某些自定义过程的一部分,您应该将其包括在内。如果它是一个 exec 调用,您必须注意引用,因为 > 用于指示 Tcl exec 命令中的重定向。为什么不读取文件并使用 Tcl regexp 命令?
  • 我只是想在一个巨大的文件中计算以> 为前缀的特定 IP 地址的实例。使用 grep 和 wc -l 是我想到的第一件事,然后我很好奇它为什么不起作用。之后我阅读了this 解决了这个问题。

标签: grep tcl


【解决方案1】:

您可以确保> 不是 exec cmd 中单词的第一个字符:例如,使用其他不必要的捕获括号

$ tclsh
% exec cat ./afile
line1
line2 > somestring
line3
% exec grep -orI {> somestring} .
[waits for me to hit ctrl-d]
child process exited abnormally
% exec grep -orI {\(> somestring\)} .
./afile:> somestring

【讨论】:

  • 非常感谢!这似乎完美无缺。我从来没有想过以这种方式解决它。谢谢,这确实有助于扩展我对 tcl 及其解决方法的理解。这里的基本规则是 > 可以通过使用 ( ) 使正则表达式以不同的字符开头来避免重定向?
【解决方案2】:

我找到了这个问题和答案: how to pass command line parameter containing '<' to 'exec'

我意识到 exec 和 &gt; 在 tcl 中不是朋友。我会找到一种创造性的方法来克服这个问题,或者使用其他工具来完成这项任务。

【讨论】:

  • 严格来说,他们友好了; exec 的语法很烂(是的,我们知道它确实如此,但不想破坏使用它的大量现有脚本)。
【解决方案3】:

eval 是你的朋友:

set cmd "grep this someFile.txt > outputfile.txt"
eval $cmd

【讨论】:

  • 谢谢,但不,我正在寻找 &gt; 不使用它进行重定向。 ;)
  • 哎呀!好吧,我仍然认为 eval 应该可以工作,但我还没有解决方案。
  • eval 对此不起作用。 :) 在这里有效的是使用 Glen J. 建议的括号。 :) Eval 确实让您在执行命令之前有更多的权力来编辑它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多