我查看了一个非常相似的问题,但无法解决问题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,因为你有\nin 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'