【问题标题】:I need to replace literal \n with newline in shell我需要在 shell 中用换行符替换文字 \n
【发布时间】:2019-07-14 17:31:28
【问题描述】:

我们收到一个文件,它本质上是一个 ssh 令牌密钥。 这在开始时就有价值,比如说

Foo\nBarFoo,\nFoo\nBarFoo

现在,我想用

替换这些
Foo
BarFoo,
Foo
BarFoo

我通过将整个键复制到变量中来尝试使用sedtr 命令。 似乎有效的一件事是: %s/\\n/\r/g,但这是不可接受的,因为我无法打开vi 编辑器。

我最近尝试了echo -e 'Foo\nBarFoo,\nFoo\nBarFoo,但希望它更微妙。

【问题讨论】:

  • 在 sed 中使用该模式有什么问题?
  • This stackoverflow post 回答您的问题。提问前先搜索。
  • 你试过什么?什么没用? I have tried sed and tr commands by copying the entire key in a variable 你到底试过什么?只要给出示例命令,示例输出,这样的小代码sn-ps就很有帮助。注意有ed 命令,它在批处理模式下完全执行vi-like 命令。而且,echo ': %s/\\n/\r/g' | vi input_file 不工作吗?
  • @Mihir 该帖子是关于用另一个字符替换换行符。这是关于用换行符替换字符串\n。这些不是重复的。
  • @KamilCuk,感谢您指出这一点,我的错误。

标签: shell replace newline


【解决方案1】:

您遇到问题是因为您可能正在使用OSXBSD。使用GNU sed's/\\n/\n/g’ 应该可以工作。

对于POSIX sed,使用这个,

echo "Foo\nBarFoo,\nFoo\nBarFoo" | sed 's/\\n/\
/g'

【讨论】:

  • 我也试过sed ':a;N;$!ba;s/\n/\\n/g',用换行符替换文字。
猜你喜欢
  • 2014-10-16
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2021-09-26
  • 2014-08-25
相关资源
最近更新 更多