在sed替换字符串中转义换行符

spr*_*aff 22 unix bash solaris escaping sed

以下是我尝试在运行时b使用换行符替换字符的尝试sedbash

$> echo 'abc' | sed 's/b/\n/'
anc
Run Code Online (Sandbox Code Playgroud)

不,那不是它

$> echo 'abc' | sed 's/b/\\n/'
a\nc
Run Code Online (Sandbox Code Playgroud)

不,那也不是.我想要的输出是

a
c
Run Code Online (Sandbox Code Playgroud)

救命!

jay*_*ngh 15

看起来你在BSD或Solaris上.试试这个:

[jaypal:~/Temp] echo 'abc' | sed 's/b/\ 
> /'
a
c
Run Code Online (Sandbox Code Playgroud)

添加黑色斜杠并按Enter键并完成您的sed声明.

  • 如果你有bash那么你也应该能够像这样编写它,即使在Solaris上也是如此,并且让它工作:`echo abc | sed's/b/\'$'\n'/` - 这里的优点是你没有那个讨厌的重要换行符,这使得复制和粘贴更容易.`$'\n'`是一种插入文字转义序列的笨拙方式.当`sed`看到它与Jaypal的版本相同时. (7认同)

tbo*_*e12 6

$ echo 'abc' | sed 's/b/\'$'\n''/'
a
c
Run Code Online (Sandbox Code Playgroud)

在 Bash 中,$'\n'扩展为单引号换行符(请参阅 的“QUOTING”部分man bash)。这三个字符串在作为参数传递到 sed 之前被连接起来。Sed 要求对换行符进行转义,因此是我粘贴的代码中的第一个反斜杠。

  • 不错的答案!`回声'abc' | 我认为 sed $'s,b,\\\n,'` 更清楚。 (2认同)

gle*_*man 5

您没有说要全局替换所有b. 如果是,你想要tr

$ echo abcbd | tr b $'\n'
a
c
d
Run Code Online (Sandbox Code Playgroud)

在 Solaris 5.8 和 bash 2.03 上对我有用