如何替换:带换行符的字符?

时间:2013-05-15 12:50:37

标签: linux bash unix

我查看了一个非常相似的问题,但无法解决问题Replace comma with newline in sed

我正在尝试在字符串中转换:个字符。这就是我试过的:

echo -e 'this:is:a:test' | sed "s/\:/'\n'/g"

但这取代了:用n。我也尝试了tr,但结果相同。我相信-e在被管道传输之后不会被看到,因此无法识别新线路。

感谢任何帮助。

4 个答案:

答案 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'