【问题标题】:redirect output from tr从 tr 重定向输出
【发布时间】:2015-06-12 08:14:49
【问题描述】:

我正在尝试使用 tr 将 替换为网页中的单引号。当我这样做时

tr "<92>" "'" < index.html

输出显示已发生替换。所以要就地编辑(或尽可能接近 tr )我会这样做

tr "<92>" "'" < index.html >> index.html

文件没有改变。作为参考,完全重定向到另一个文件也无法正常工作。

【问题讨论】:

  • 当您&gt;&gt; index_new.html 时会发生什么?您应该从不输入和输出到同一个文件
  • tr 翻译个字符,而不是单词。您的原始命令将&lt; 替换为',并忽略92&gt;。您需要使用 sed 之类的东西来做比字符翻译更复杂的事情。
  • 你在这里用tr 100% 找错了树。它将 1 个或多个 CHARACTERS 替换为 1 个或多个 CHARACTERS 而不是序列。为此使用sed

标签: tr character-replacement


【解决方案1】:

据我所知,tr 不能用于就地修改。 您可以使用 sed 作为替代方案。试试:

sed "s/&lt;92&gt;/'/g" index.html

如果您同意输出,请使用 inplace 标志 (-i)

sed -i "s/&lt;92&gt;/'/g" index.html

你也可以参考这个答案:tr command not able to direct the Output?

【讨论】:

  • 我实际上首先尝试过 sed,因为这是我对这类工作的了解,但那个精确的命令:212 sed -i "s//'/g" index.html 没有也不在那里工作。这让我想到了 tr。取决于您认为 tr 可以写入其正在翻译的同一文件的手册页,只要您使用附加标准输出 (>>) 重定向而不是覆盖标准输出 (>)。覆盖会导致原始文件的内容被破坏。我开始怀疑这个提供商让我工作的环境。我打算在另一个地方尝试。
  • 好的,第一个字符串是一个元标记,似乎只有 vi 可以看到。对于可以处理元标记的流编辑器有什么建议吗?
  • 哦,在那种情况下,我猜你想替换智能引号(这些字符:‘’)。好吧,在这种情况下,我认为sed -i "s/[‘’]/'/g"会起作用。
  • 谢谢!除了 只显示在 vim 中(作为十六进制)之外,这只是票。我正在关闭此线程以找到一种将 CP1252 文件批量转换为 UTF-8 的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 2014-04-16
  • 1970-01-01
  • 2011-06-04
  • 2014-03-28
相关资源
最近更新 更多