【问题标题】:Windows tr output fileWindows tr 输出文件
【发布时间】:2018-02-01 15:53:55
【问题描述】:

我正在尝试运行以下命令:

cat file.txt | tr -d "{\"" > output.txt

但它总是出错:

tr: extra operand '>'

似乎它没有正确解释胡萝卜。 当我尝试这个时也会发生同样的事情:

tr -f "{\"" < input.txt > output.txt
tr: extra operand '<'

【问题讨论】:

  • 你说的是“windows”,你用的是cygwin吗?您显示的语法是正确的(在 ubuntu linux 上测试过),所以无论 shell 有什么问题
  • 不只是直接的命令提示符,使用 GNU32Tools
  • 最好具体一点。你正在运行cmd.exe?这基本上是 DOS,并且可能被 "X\""\" 部分)混淆了。尝试仅删除 \" 。 (是的,我们必须单独修复删除")。祝你好运。
  • ^cmd 中的转义字符,所以试试cat file.txt | tr -d ^"{\"" &gt; output.txt 甚至cat file.txt | tr -d ^^^"{\"" &gt; output.txt(管道可能需要双重转义)...

标签: windows cmd tr


【解决方案1】:

看起来cmd"{\"" 混淆了。首先,反斜杠在转义引号时可以正常工作。但是 cmd 使用两个连续的引号来表示转义的引号。然后该行的其余部分被视为同一个句子。使用printf可以看到效果:

C:\>printf "%s\n" "x\"" > nul
x"
>
nul

因此,printf 单独获取每个单词,但 cmd 将它们视为引用字符串的所有部分,因此不会将 &gt; nul 解析为普通单词以外的任何内容。

解决方案?在字符串中使用两个连续的引号:

cat file.txt | tr -d "{""" > output.txt

【讨论】:

  • cmd 不转义"",因为转义"cmd 中的转义字符是^,所以^" 转义"。至少有一个(外部)命令接受"": find...
  • @aschipfl cat file.txt | tr -d "{^"" &gt; output.txt 不起作用。 tr 看到实际的 ^ 字符。另一方面,对于""tr 会看到一个"
  • ^ 未处理,因为它出现在 ""cmd 之间,因此您需要转义 first 引号,例如 ^"{"",然后它应该可以工作,我猜......
  • @aschipfl 是的,^"{"" 有效!但似乎"{"" 也有效,并且短了 1 个字符。在我的回答中,我最后多了一个",实际上这似乎是不必要的。
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 2021-11-25
  • 1970-01-01
  • 2022-12-14
  • 2015-06-12
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多