1

我在 Windows 上工作,我想从一个目录中找到所有的字符串 beetwen 引号。例如,如果我有这个:

string s = "Hello World!"

grep 命令应该返回“Hello World!”。这是我如何做到的:

grep -Roe \"[^\"]*\" directory

我需要将输出重定向到一个文件,但是当我重定向输出时,像这样 "grep -Roe \"[^\"]*\" directory > log" 我收到以下错误:

>: Invalid argument
log: No such file or directory

你知道我该如何解决这个问题并重定向输出吗?

4

1 回答 1

2

这是一个非常古老的问题,到目前为止,OP 可能已经解决了它......但对于后代来说,值得注意的是这个问题与编译器约定有关(请参阅这个问题,并找到标题为“你不是”的答案t 使用 Unix shell。引用不同")。

正如您所发现的,虽然您的表达式在命令行中可以正常工作,但当它与重定向结合使用时,它会被错误地解析。

^解决方案是使用插入符号 ( ) 而不是反斜杠 ( )来转义双引号\。而且您还需要转义插入符号(使用插入符号)。您还应该用单引号将整个搜索表达式括起来。

使用插入符号转义(并包含在 中'')重新制定命令会产生

grep -Roe '^"[^^^"]*^"' directory > log

我经常使用它来从遗留的 HTML 文件中获取样式属性(基本上是由一位不太相信将内容与表示分离的前编码员编写的东西)——在这种情况下,我使用

grep -iown 'style=^"[^^^"]*^"' index.html > styles.txt

它就像一个魅力。

想象一个代码存储库,其中每个 HTML 文件,甚至p标签都类似于<p style="margin-left:20px;margin-top:20px; font: normal 12px Arial; color#FFFFFF">. 嘘。

于 2016-09-16T07:51:11.293 回答