我查看了一个非常相似的问题,但无法解决问题Replace comma with newline in sed
我正在尝试转换:
字符串中的字符。这是我尝试过的:
echo -e 'this:is:a:test' | sed "s/\:/'\n'/g"
但这用 n 代替:我也尝试了 tr 但结果相同。我相信 -e 在通过管道传输后看不到,因此无法识别新行。
任何帮助表示赞赏。
我查看了一个非常相似的问题,但无法解决问题Replace comma with newline in sed
我正在尝试转换:
字符串中的字符。这是我尝试过的:
echo -e 'this:is:a:test' | sed "s/\:/'\n'/g"
但这用 n 代替:我也尝试了 tr 但结果相同。我相信 -e 在通过管道传输后看不到,因此无法识别新行。
任何帮助表示赞赏。
echo 'this:is:a:test' | tr : \\n
任何符合 POSIX 的 tr都将支持\n
转义序列。但是,您需要注意引用或转义转义序列(上面的双反斜杠)。
echo的-e
参数对 echo 的参数没有影响。
我假设您已经在变量中有字符串。这使用参数扩展替换运算符将 every 替换:
为换行符,该换行符使用带$'...'
引号的字符串指定。这两个功能都是bash
对标准的扩展,可能无法在另一个 shell 中工作。
$ foo="this:is:a:test"
$ bar="${foo//:/$'\n'}"
$ echo "$bar"
this
is
a
test
你不需要echo -e
,因为你有\n
in sed
,而不是 inecho
声明。因此,以下应该有效(请注意,我已更改'\n'
为\n
):
echo -e 'this:is:a:test' | sed "s/\:/\n/g"
或者
echo 'this:is:a:test' | sed "s/\:/\n/g"
另请注意,您不需要转义:
,因此以下内容也可以使用(感谢@anishsane)
echo 'this:is:a:test' | sed "s/:/\n/g"
下面只是重申你为什么-e
需要echo
$ echo -e "hello \n"
hello
$ echo "hello \n"
hello \n
也许 Perl 是一种选择?
echo -e 'this:is:a:test' | perl -p -e 's/:/\n/g'