用文字\n替换换行符

Par*_*rze 36 sed

这个stackoverflow问题有一个用sed替换换行符的答案,使用sed':a; N; $!ba; s/\n// g'格式.

这适用,但不适用于\ r,\n等特殊字符.

我想要做的是用文字\n替换换行符.试着

sed ':a;N;$!ba;s/\n/\\n/g'
Run Code Online (Sandbox Code Playgroud)

sed ':a;N;$!ba;s/\n/\\\n/g'
Run Code Online (Sandbox Code Playgroud)

sed ":a;N;$!ba;s/\n/'\'n/g"
Run Code Online (Sandbox Code Playgroud)

但一切都无济于事.Sed继续用换行符替换换行符....

思考?

第一个回答后编辑:

为了完整起见,运行的命令是:

PostContent =cat $TextTable | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g'

其中TextTable是一个变量,链接到包含以下格式的JSON输出的文本文件:

{"posts":[{"title":"mysupertest","slug":"bi-test","markdown":"##TEST
First things first !
To TEST this TEST TEST, click the download button below.
If you need more information about the TEST TEST, you can  read the Table of Contents below.

<a href='/assets/TEST.pdf' style='border-radius:5px; padding: 4px 15px; background-color:#008CBA; color:white; text-decoration:none; float:right;' download> Download </a>


##TEST OF TEST


###TEST TEST PLATFORM TEST GUIDE
WaTESTve TEST SetupTEST
TESTTEST
TESTTESTETESTTETSTTEST
TESTTESTTTETST
TESTTES
TESTTESTESSTSTESTESTTES
TEST","image":"http://localhost:3000/myimage.jpg","featured":false,"page":false,"status":"draft","language":"en_US","meta_title":null,"meta_description":null,"author":"4","publishedBy":null,"tags":[{"uuid":"ember2034","name":"implementation guides","slug":null,"description":null,"meta_title":null,"meta_description":null,"image":null,"visibility":"public"}]}]}
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 65

这就是你要做的一切吗?

$ cat file
a
b
c

$ awk '{printf "%s\\n", $0}' file
a\nb\nc\n$
Run Code Online (Sandbox Code Playgroud)

甚至:

$ awk -v ORS='\\n' '1' file
a\nb\nc\n$
Run Code Online (Sandbox Code Playgroud)

首先在输入文件上运行dos2unix,\r如果你愿意,可以去掉s,或者使用-v RS='\r?\n'GNU awk或者sub(/\r$/,"");在printf之前做或者用十几种清晰,简单的方法处理它.

sed用于单个行上的简单替换,即全部.对于其他任何你应该使用awk.

  • 例如,这非常适合准备将SSL证书添加到json数据包的单行中.也在使用MacOS.Upvoted. (12认同)
  • 这对我在macOS上工作,我试图实现相同的转换键/ pem文件到单线程为json数据库.. (3认同)
  • 这会在末尾附加一个额外的“\n”。 (3认同)

anu*_*ava 27

这应该适用于两个LFCR-LF行结尾:

sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g' file
Run Code Online (Sandbox Code Playgroud)

  • 谢谢回答。不幸的是,我使用此命令得到了相同的结果。我已经用有关该过程的更多详细信息更新了问题。 (2认同)
  • 您也可以发布有问题的“cat -vte file.json”的输出吗? (2认同)
  • 没关系,我是个白痴。Echo将换行符解释为换行符。谢谢您的回答。 (2认同)
  • 您还可以将“{0,1}”替换为“?”,这对我来说似乎更具可读性。 (2认同)
  • @anubhava:我已经使用“cat”四分之一个世纪了,但从来没有费心去查看手册页(DOH!);未来我会牢记“-vte” - 谢谢!:-) (2认同)

Wal*_*r A 16

通过该-z选项,您可以执行以下操作

sed -z 's/\n/\\n/g' file
Run Code Online (Sandbox Code Playgroud)

或者

sed -z "s/\n/\\\n/g" file
Run Code Online (Sandbox Code Playgroud)

  • `-z` 似乎仅在 GNU sed 中可用,在 BSD sed 中不可用;在 macOS 下,适用通常的“brew install gnu-sed”选项 (3认同)

小智 6

您可以使用sed和执行此操作tr:

sed 's/$/\\n/' file | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)

然而,这将\n在最后添加额外的.

  • 最后一个 `\n` 可以使用 `$!` 轻松解决: `sed '$!s/$/\\n/' file | tr -d '\n'`。否则,很棒的答案:) (2认同)

Ric*_*alt 5

如果它对任何人有帮助,我正在寻找这个问题的反面:用换行符替换字符串中的文字 '\'n。我设法用 sed 解决它,如下所示:

_s="foo\nbar\n"
echo $_s | sed 's/\\n/\n/g'
Run Code Online (Sandbox Code Playgroud)