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