【问题标题】:awk returns "The specified path is invalid" error on cmder windowsawk 在cmder windows 上返回“指定的路径无效”错误
【发布时间】:2018-11-15 11:16:31
【问题描述】:

我正在 cmder-Windows10 上尝试来自 hereawk oneliner:

awk '/> \\box.=/,/^$/{print}'

检查日志文件。但我收到此错误:

指定的路径无效。

我知道正则表达式的基础知识,但我不明白上面的命令应该做什么。如果您能帮助我,我将不胜感激:

  • 详细说明上面的命令以及它应该返回什么?如果我意识到也许我可以在cmder 之外使用一些本机Windows 命令来复制它。可能使用findstr
  • 为什么会出现这个错误?以及是否/如何编辑命令来解决问题?

P.S.感谢this post,我能够运行命令awk '/box.=/,/^\r\n/' foo,并且它可以正常工作,返回预期返回的内容。但我仍然不知道为什么原来的命令会返回那个错误。

【问题讨论】:

  • 它尝试匹配和打印 2 个模式之间的行。模式 1 是 > \box.=,其中 . 将匹配任何字符。模式 2 是一个空行,即 ^$
  • 我不明白这些部分:> (大于空格)和/,/(斜线逗号)。 " (逗号空格)是怎么来的?
  • 好吧,我的日志文件太长了,而且它可能还包含一些我不应该在 pastebin 或类似的地方公开分享的机密信息。这一刻我只想明白上面的命令是什么意思。另外,这实际上可以在 cmder 内的任意路径中复制。所以不管我有什么日志文件。
  • 让我们分解一下。首先上面的命令是一个有效的awk 命令吗?如果是,为什么它会返回该错误?如果模式不存在,它必须不返回任何内容,我错了吗?
  • 来自您的链接:您可以将结果传送到 awk '/> \\box.=/,/^$/{print}' 您如何使用该awk?请准确的命令行。

标签: regex windows awk cmder


【解决方案1】:

演示你的命令做了什么:

$ cat foo
nope
> \box.=
this
and this

nope

您的脚本已执行:

$ awk '/> \\box.=/,/^$/' foo
> \box.=
this
and this
            # this is the empty line

如果您在 Windows 中运行它,/^$/ 可能无法工作,因为 Windows 使用 \r\n 换行符。相反,尝试:

$ awk -v RS="\r\n" '/> \\box.=/,/^$/'` file

【讨论】:

  • 谢谢。你能用\r\n for windows 写完整的命令吗?
  • @Foad,也许您希望搜索停止的那一行实际上并不是空白的。在 unix 环境中,您可以使用 od -ccat -t -e 来更好地了解输入文件中的实际内容。如果您包含其中之一的输出(如果文件很大,则包含 sn-p),人们会更好地了解您正在处理的内容。
  • @ghoti 不确定我是否理解您的观点。但是我在上面提出的 foo 文件上测试了其他 awk 命令并且它可以工作。所以文件没问题,awk没问题。但是命令中有一些东西使它与cmder环境不兼容。
  • 请看我的附言
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2016-05-17
  • 1970-01-01
相关资源
最近更新 更多